Subversion Repositories Sites.tela-botanica.org

Rev

Blame | Last modification | View Log | RSS feed

/**
 * $Id: editor_plugin_src.js 251 2007-04-10 20:16:15Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 */

/* Import plugin specific language pack */
tinyMCE.importPluginLanguagePack('save');

var TinyMCE_SavePlugin = {
        getInfo : function() {
                return {
                        longname : 'Save',
                        author : 'Moxiecode Systems AB',
                        authorurl : 'http://tinymce.moxiecode.com',
                        infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save',
                        version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
                };
        },

        initInstance : function(inst) {
                inst.addShortcut('ctrl', 's', 'lang_save_desc', 'mceSave');
        },

        /**
         * Returns the HTML contents of the save control.
         */
        getControlHTML : function(cn) {
                switch (cn) {
                        case "save":
                                return tinyMCE.getButtonHTML(cn, 'lang_save_desc', '{$pluginurl}/images/save.gif', 'mceSave');

                        case "cancel":
                                return tinyMCE.getButtonHTML(cn, 'lang_cancel_desc', '{$pluginurl}/images/cancel.gif', 'mceCancel');
                }

                return "";
        },

        /**
         * Executes the save command.
         */
        execCommand : function(editor_id, element, command, user_interface, value) {
                // Handle commands
                switch (command) {
                        case "mceSave":
                                return this._save(editor_id, element, command, user_interface, value);

                        case "mceCancel":
                                return this._cancel(editor_id, element, command, user_interface, value);
                }

                // Pass to next handler in chain
                return false;
        },

        _save : function(editor_id, element, command, user_interface, value) {
                var inst, formObj, os, i, elementId;

                if (tinyMCE.getParam("fullscreen_is_enabled"))
                        return true;

                inst = tinyMCE.selectedInstance;
                formObj = inst.formElement.form;

                if (tinyMCE.getParam("save_enablewhendirty") && !inst.isDirty())
                        return true;

                if (formObj) {
                        tinyMCE.triggerSave();

                        // Use callback instead
                        if ((os = tinyMCE.getParam("save_onsavecallback"))) {
                                if (eval(os + '(inst);')) {
                                        inst.startContent = tinyMCE.trim(inst.getBody().innerHTML);
                                        /*inst.undoLevels = new Array();
                                        inst.undoIndex = 0;
                                        inst.typingUndoIndex = -1;
                                        inst.undoRedo = true;
                                        inst.undoLevels[inst.undoLevels.length] = inst.startContent;*/
                                        tinyMCE.triggerNodeChange(false, true);
                                }

                                return true;
                        }

                        // Disable all UI form elements that TinyMCE created
                        for (i=0; i<formObj.elements.length; i++) {
                                elementId = formObj.elements[i].name ? formObj.elements[i].name : formObj.elements[i].id;

                                if (elementId.indexOf('mce_editor_') == 0)
                                        formObj.elements[i].disabled = true;
                        }

                        inst.isNotDirty = true;

                        if (formObj.onsubmit == null || formObj.onsubmit() != false)
                                inst.formElement.form.submit();

                        tinyMCE.triggerNodeChange(false, true);
                } else
                        alert("Error: No form element found.");

                return true;
        },

        _cancel : function(editor_id, element, command, user_interface, value) {
                var inst = tinyMCE.getInstanceById(editor_id), os, h = tinyMCE.trim(inst.startContent);

                // Use callback instead
                if ((os = tinyMCE.getParam("save_oncancelcallback"))) {
                        if (eval(os + '(inst);'))
                                return true;
                }

                inst.setHTML(h);

                inst.undoRedo.undoLevels = [];
                inst.undoRedo.add({ content : h });
                inst.undoRedo.undoIndex = 0;
                inst.undoRedo.typingUndoIndex = -1;

                tinyMCE.triggerNodeChange(false, true);

                return true;
        },

        handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {
                var inst;

                if (tinyMCE.getParam("fullscreen_is_enabled")) {
                        tinyMCE.switchClass(editor_id + '_save', 'mceButtonDisabled');
                        return true;
                }

                if (tinyMCE.getParam("save_enablewhendirty")) {
                        inst = tinyMCE.getInstanceById(editor_id);

                        if (inst.isDirty()) {
                                tinyMCE.switchClass(editor_id + '_save', 'mceButtonNormal');
                                return true;
                        }

                        tinyMCE.switchClass(editor_id + '_save', 'mceButtonDisabled');
                }

                return true;
        }
};

tinyMCE.addPlugin("save", TinyMCE_SavePlugin);