Déplacement préalable à l'eggification.
[ckeditor.git] / Products / ckeditor / skins / ckeditor / plugins / codemirror / static / gitweb.js
diff --git a/skins/ckeditor/plugins/codemirror/plugin.js b/skins/ckeditor/plugins/codemirror/plugin.js
deleted file mode 100755 (executable)
index 6430e68..0000000
+++ /dev/null
@@ -1,998 +0,0 @@
-/*\r
-*  The "codemirror" plugin. It's indented to enhance the\r
-*  "sourcearea" editing mode, which displays the xhtml source code with\r
-*  syntax highlight and line numbers.\r
-* Licensed under the MIT license\r
-* CodeMirror Plugin: http://codemirror.net/ (MIT License)\r
-*/\r
-\r
-(function() {\r
-    CKEDITOR.plugins.add('codemirror', {\r
-        icons: 'SearchCode,AutoFormat,CommentSelectedRange,UncommentSelectedRange,AutoComplete',\r
-        lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en-au,en-ca,en-gb,en,eo,es,et,eu,fa,fi,fo,fr-ca,fr,gl,gu,he,hi,hr,hu,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt-br,pt,ro,ru,sk,sl,sr-latn,sr,sv,th,tr,ug,uk,vi,zh-cn,zh',\r
-        version: 1.10,\r
-        init: function (editor) {\r
-            var rootPath = this.path,\r
-                defaultConfig = {\r
-                    autoCloseBrackets: true,\r
-                    autoCloseTags: true,\r
-                    autoFormatOnStart: false,\r
-                    autoFormatOnUncomment: true,\r
-                    continueComments: true,\r
-                    enableCodeFolding: true,\r
-                    enableCodeFormatting: true,\r
-                    enableSearchTools: true,\r
-                    highlightActiveLine: true,\r
-                    highlightMatches: true,\r
-                    indentWithTabs: false,\r
-                    lineNumbers: true,\r
-                    lineWrapping: true,\r
-                    mode: 'htmlmixed',\r
-                    matchBrackets: true,\r
-                    matchTags: true,\r
-                    showAutoCompleteButton: true,\r
-                    showCommentButton: true,\r
-                    showFormatButton: true,\r
-                    showSearchButton: true,\r
-                    showTrailingSpace: true,\r
-                    showUncommentButton: true,\r
-                    theme: 'default',\r
-                    useBeautify: false\r
-                };\r
-            \r
-            // Get Config & Lang\r
-            var config = CKEDITOR.tools.extend(defaultConfig, editor.config.codemirror || {}, true),\r
-                lang = editor.lang.codemirror;\r
-            \r
-            // check for old config settings for legacy support\r
-            if (editor.config.codemirror_theme) {\r
-                config.theme = editor.config.codemirror_theme;\r
-            }\r
-            if (editor.config.codemirror_autoFormatOnStart) {\r
-                config.autoFormatOnStart = editor.config.codemirror_autoFormatOnStart;\r
-            }\r
-\r
-            // Source mode isn't available in inline mode yet.\r
-            if (editor.elementMode === CKEDITOR.ELEMENT_MODE_INLINE) {\r
-                \r
-                // Override Source Dialog\r
-                CKEDITOR.dialog.add('sourcedialog', function (editor) {\r
-                    var size = CKEDITOR.document.getWindow().getViewPaneSize(),\r
-                        width = Math.min(size.width - 70, 800),\r
-                        height = size.height / 1.5,\r
-                        oldData;\r
-\r
-                    function loadCodeMirrorInline(editor, textarea) {\r
-                        var delay;\r
-\r
-                        window["codemirror_" + editor.id] = CodeMirror.fromTextArea(textarea, {\r
-                            mode: config.mode,\r
-                            matchBrackets: config.matchBrackets,\r
-                            matchTags: config.matchTags,\r
-                            workDelay: 300,\r
-                            workTime: 35,\r
-                            readOnly: editor.config.readOnly,\r
-                            lineNumbers: config.lineNumbers,\r
-                            lineWrapping: config.lineWrapping,\r
-                            autoCloseTags: config.autoCloseTags,\r
-                            autoCloseBrackets: config.autoCloseBrackets,\r
-                            highligctionMatches: config.highlightMatches,\r
-                            continueComments: config.continueComments,\r
-                            indentWithTabs: config.indentWithTabs,\r
-                            theme: config.theme,\r
-                            showTrailingSpace: config.showTrailingSpace,\r
-                            showCursorWhenSelecting: true,\r
-                            viewportMargin: Infinity,\r
-                            //extraKeys: {"Ctrl-Space": "autocomplete"},\r
-                            extraKeys: { "Ctrl-Q": function (codeMirror_Editor) { window["foldFunc_" + editor.id](codeMirror_Editor, codeMirror_Editor.getCursor().line); } },\r
-                            onKeyEvent: function (codeMirror_Editor, evt) {\r
-                                if (config.enableCodeFormatting) {\r
-                                    var range = getSelectedRange();\r
-                                    if (evt.type === "keydown" && evt.ctrlKey && evt.keyCode === 75 && !evt.shiftKey && !evt.altKey) {\r
-                                        window["codemirror_" + editor.id].commentRange(true, range.from, range.to);\r
-                                    } else if (evt.type === "keydown" && evt.ctrlKey && evt.keyCode === 75 && evt.shiftKey && !evt.altKey) {\r
-                                        window["codemirror_" + editor.id].commentRange(false, range.from, range.to);\r
-                                        if (config.autoFormatOnUncomment) {\r
-                                            window["codemirror_" + editor.id].autoFormatRange(range.from, range.to);\r
-                                        }\r
-                                    } else if (evt.type === "keydown" && evt.ctrlKey && evt.keyCode === 75 && !evt.shiftKey && evt.altKey) {\r
-                                        window["codemirror_" + editor.id].autoFormatRange(range.from, range.to);\r
-                                    }\r
-                                    /*else if (evt.type === "keydown") {\r
-                                        CodeMirror.commands.newlineAndIndentContinueMarkdownList(window["codemirror_" + editor.id]);\r
-                                    }*/\r
-                                }\r
-                            }\r
-                        });\r
-\r
-                        var holderHeight = height + 'px';\r
-                        var holderWidth = width + 'px';\r
-\r
-                        // Store config so we can access it within commands etc.\r
-                        window["codemirror_" + editor.id].config = config;\r
-                        \r
-                        if (config.autoFormatOnStart) {\r
-                            if (config.useBeautify) {\r
-                                var indent_size = 4,\r
-                                    indent_char = ' ',\r
-                                    brace_style = 'collapse'; //collapse, expand, end-expand \r
-\r
-                                var source = window["codemirror_" + editor.id].getValue();\r
-\r
-                                window["codemirror_" + editor.id].setValue(html_beautify(source, indent_size, indent_char, 120, brace_style));\r
-                            } else {\r
-                                window["codemirror_" + editor.id].autoFormatAll({\r
-                                    line: 0,\r
-                                    ch: 0\r
-                                }, {\r
-                                    line: window["codemirror_" + editor.id].lineCount(),\r
-                                    ch: 0\r
-                                });\r
-                            }\r
-                        }\r
-\r
-                        function getSelectedRange() {\r
-                            return {\r
-                                from: window["codemirror_" + editor.id].getCursor(true),\r
-                                to: window["codemirror_" + editor.id].getCursor(false)\r
-                            };\r
-                        }\r
-\r
-                        window["codemirror_" + editor.id].on("change", function () {\r
-                            clearTimeout(delay);\r
-                            delay = setTimeout(function () {\r
-                                var cm = window["codemirror_" + editor.id];\r
-\r
-                                if (cm) {\r
-                                    cm.save();\r
-                                }\r
-                            }, 300);\r
-                        });\r
-\r
-                        window["codemirror_" + editor.id].setSize(holderWidth, holderHeight);\r
-\r
-                        // Enable Code Folding (Requires 'lineNumbers' to be set to 'true')\r
-                        if (config.lineNumbers && config.enableCodeFolding) {\r
-                            window["codemirror_" + editor.id].on("gutterClick", window["foldFunc_" + editor.id]);\r
-                        }\r
-                        // Highlight Active Line\r
-                        if (config.highlightActiveLine) {\r
-                            window["codemirror_" + editor.id].hlLine = window["codemirror_" + editor.id].addLineClass(0, "background", "activeline");\r
-                            window["codemirror_" + editor.id].on("cursorActivity", function () {\r
-                                var cur = window["codemirror_" + editor.id].getLineHandle(window["codemirror_" + editor.id].getCursor().line);\r
-                                if (cur != window["codemirror_" + editor.id].hlLine) {\r
-                                    window["codemirror_" + editor.id].removeLineClass(window["codemirror_" + editor.id].hlLine, "background", "activeline");\r
-                                    window["codemirror_" + editor.id].hlLine = window["codemirror_" + editor.id].addLineClass(cur, "background", "activeline");\r
-                                }\r
-                            });\r
-                        }\r
-\r
-                        // Run config.onLoad callback, if present.\r
-                        if (typeof config.onLoad === 'function') {\r
-                            config.onLoad(window["codemirror_" + editor.id], editor);\r
-                        }\r
-                    }\r
-\r
-                    return {\r
-                        title: editor.lang.sourcedialog.title,\r
-                        minWidth: width,\r
-                        minHeight: height,\r
-                        resizable : CKEDITOR.DIALOG_RESIZE_NONE,\r
-                        onShow: function () {\r
-                            // Set Elements\r
-                            this.getContentElement('main', 'data').focus();\r
-                            this.getContentElement('main', 'AutoComplete').setValue(config.autoCloseTags, true);\r
-                            \r
-                            var textArea = this.getContentElement('main', 'data').getInputElement().$;\r
-                            \r
-                            // Load the content\r
-                            this.setValueOf('main', 'data', oldData = editor.getData());\r
-\r
-                            if (typeof (CodeMirror) == 'undefined') {\r
-\r
-                                CKEDITOR.document.appendStyleSheet(rootPath + 'css/codemirror.min.css');\r
-\r
-                                if (config.theme.length && config.theme != 'default') {\r
-                                    CKEDITOR.document.appendStyleSheet(rootPath + 'theme/' + config.theme + '.css');\r
-                                }\r
-\r
-                                CKEDITOR.scriptLoader.load(rootPath + 'js/codemirror.min.js', function () {\r
-\r
-                                    CKEDITOR.scriptLoader.load(getCodeMirrorScripts(), function () {\r
-                                        loadCodeMirrorInline(editor, textArea);\r
-                                    });\r
-                                });\r
-\r
-\r
-                            } else {\r
-                                loadCodeMirrorInline(editor, textArea);\r
-                            }\r
-\r
-\r
-                        },\r
-                        onCancel: function (event) {\r
-                            if (event.data.hide) {\r
-                                window["codemirror_" + editor.id].toTextArea();\r
-\r
-                                // Free Memory\r
-                                window["codemirror_" + editor.id] = null;\r
-                            }\r
-                        },\r
-                        onOk: (function () {\r
-\r
-                            function setData(newData) {\r
-                                var that = this;\r
-\r
-                                editor.setData(newData, function () {\r
-                                    that.hide();\r
-\r
-                                    // Ensure correct selection.\r
-                                    var range = editor.createRange();\r
-                                    range.moveToElementEditStart(editor.editable());\r
-                                    range.select();\r
-                                });\r
-                            }\r
-\r
-                            return function () {\r
-                                window["codemirror_" + editor.id].toTextArea();\r
-\r
-                                // Free Memory\r
-                                window["codemirror_" + editor.id] = null;\r
-\r
-                                // Remove CR from input data for reliable comparison with editor data.\r
-                                var newData = this.getValueOf('main', 'data').replace(/\r/g, '');\r
-\r
-                                // Avoid unnecessary setData. Also preserve selection\r
-                                // when user changed his mind and goes back to wysiwyg editing.\r
-                                if (newData === oldData)\r
-                                    return true;\r
-\r
-                                // Set data asynchronously to avoid errors in IE.\r
-                                CKEDITOR.env.ie ? CKEDITOR.tools.setTimeout(setData, 0, this, newData) : setData.call(this, newData);\r
-\r
-                                // Don't let the dialog close before setData is over.\r
-                                return false;\r
-                            };\r
-                        })(),\r
-\r
-                        contents: [{\r
-                            id: 'main',\r
-                            label: editor.lang.sourcedialog.title,\r
-                            elements: [\r
-                                {\r
-                                    type: 'hbox',\r
-                                    style: 'width: 80px;margin:0;',\r
-                                    widths: ['20px', '20px', '20px', '20px'],\r
-                                    children: [\r
-                                        {\r
-                                            type: 'button',\r
-                                            id: 'searchCode',\r
-                                            label: '',\r
-                                            title: lang.searchCode,\r
-                                            'class': 'searchCodeButton',\r
-                                            onClick: function() {\r
-                                                CodeMirror.commands.find(window["codemirror_" + editor.id]);\r
-                                            }\r
-                                        }, {\r
-                                            type: 'button',\r
-                                            id: 'autoFormat',\r
-                                            label: '',\r
-                                            title: lang.autoFormat,\r
-                                            'class': 'autoFormat',\r
-                                            onClick: function() {\r
-                                                var range = {\r
-                                                    from: window["codemirror_" + editor.id].getCursor(true),\r
-                                                    to: window["codemirror_" + editor.id].getCursor(false)\r
-                                                };\r
-                                                window["codemirror_" + editor.id].autoFormatRange(range.from, range.to);\r
-                                            }\r
-                                        }, {\r
-                                            type: 'button',\r
-                                            id: 'CommentSelectedRange',\r
-                                            label: '',\r
-                                            title: lang.commentSelectedRange,\r
-                                            'class': 'CommentSelectedRange',\r
-                                            onClick: function () {\r
-                                                var range = {\r
-                                                    from: window["codemirror_" + editor.id].getCursor(true),\r
-                                                    to: window["codemirror_" + editor.id].getCursor(false)\r
-                                                };\r
-                                                window["codemirror_" + editor.id].commentRange(true, range.from, range.to);\r
-                                            }\r
-                                        }, {\r
-                                            type: 'button',\r
-                                            id: 'UncommentSelectedRange',\r
-                                            label: '',\r
-                                            title: lang.uncommentSelectedRange,\r
-                                            'class': 'UncommentSelectedRange',\r
-                                            onClick: function () {\r
-                                                var range = {\r
-                                                    from: window["codemirror_" + editor.id].getCursor(true),\r
-                                                    to: window["codemirror_" + editor.id].getCursor(false)\r
-                                                };\r
-                                                window["codemirror_" + editor.id].commentRange(false, range.from, range.to);\r
-                                                if (window["codemirror_" + editor.id].config.autoFormatOnUncomment) {\r
-                                                    window["codemirror_" + editor.id].autoFormatRange(range.from, range.to);\r
-                                                }\r
-                                            }\r
-                                        }]\r
-                                }, {\r
-                                    type: 'checkbox',\r
-                                    id: 'AutoComplete',\r
-                                    label: lang.autoCompleteToggle,\r
-                                    title: lang.autoCompleteToggle,\r
-                                    onChange: function () {\r
-                                        window["codemirror_" + editor.id].setOption("autoCloseTags", this.getValue());\r
-                                    }\r
-                                }, {\r
-                                    type: 'textarea',\r
-                                    id: 'data',\r
-                                    dir: 'ltr',\r
-                                    inputStyle: 'cursor:auto;' +\r
-                                        'width:' + width + 'px;' +\r
-                                        'height:' + height + 'px;' +\r
-                                        'tab-size:4;' +\r
-                                        'text-align:left;',\r
-                                    'class': 'cke_source cke_enable_context_menu'\r
-                                }\r
-                            ]\r
-                        }]\r
-                    };\r
-                });\r
-\r
-                return;\r
-            }\r
-            \r
-            var sourcearea = CKEDITOR.plugins.sourcearea;\r
-            \r
-            // check if sourcearea plugin is overrriden\r
-            if (!sourcearea.commands.searchCode) {\r
-\r
-                CKEDITOR.plugins.sourcearea.commands = {\r
-                    source: {\r
-                        modes: {\r
-                            wysiwyg: 1,\r
-                            source: 1\r
-                        },\r
-                        editorFocus: false,\r
-                        readOnly: 1,\r
-                        exec: function(editorInstance) {\r
-                            if (editorInstance.mode === 'wysiwyg') {\r
-                                editorInstance.fire('saveSnapshot');\r
-                            }\r
-                            editorInstance.getCommand('source').setState(CKEDITOR.TRISTATE_DISABLED);\r
-                            editorInstance.setMode(editorInstance.mode === 'source' ? 'wysiwyg' : 'source');\r
-                        },\r
-                        canUndo: false\r
-                    },\r
-                    searchCode: {\r
-                        modes: {\r
-                            wysiwyg: 0,\r
-                            source: 1\r
-                        },\r
-                        editorFocus: false,\r
-                        readOnly: 1,\r
-                        exec: function (editorInstance) {\r
-                            CodeMirror.commands.find(window["codemirror_" + editorInstance.id]);\r
-                        },\r
-                        canUndo: true\r
-                    },\r
-                    autoFormat: {\r
-                        modes: {\r
-                            wysiwyg: 0,\r
-                            source: 1\r
-                        },\r
-                        editorFocus: false,\r
-                        readOnly: 1,\r
-                        exec: function (editorInstance) {\r
-                            var range = {\r
-                                from: window["codemirror_" + editorInstance.id].getCursor(true),\r
-                                to: window["codemirror_" + editorInstance.id].getCursor(false)\r
-                            };\r
-                            window["codemirror_" + editorInstance.id].autoFormatRange(range.from, range.to);\r
-                        },\r
-                        canUndo: true\r
-                    },\r
-                    commentSelectedRange: {\r
-                        modes: {\r
-                            wysiwyg: 0,\r
-                            source: 1\r
-                        },\r
-                        editorFocus: false,\r
-                        readOnly: 1,\r
-                        exec: function (editorInstance) {\r
-                            var range = {\r
-                                from: window["codemirror_" + editorInstance.id].getCursor(true),\r
-                                to: window["codemirror_" + editorInstance.id].getCursor(false)\r
-                            };\r
-                            window["codemirror_" + editorInstance.id].commentRange(true, range.from, range.to);\r
-                        },\r
-                        canUndo: true\r
-                    },\r
-                    uncommentSelectedRange: {\r
-                        modes: {\r
-                            wysiwyg: 0,\r
-                            source: 1\r
-                        },\r
-                        editorFocus: false,\r
-                        readOnly: 1,\r
-                        exec: function (editorInstance) {\r
-                            var range = {\r
-                                from: window["codemirror_" + editorInstance.id].getCursor(true),\r
-                                to: window["codemirror_" + editorInstance.id].getCursor(false)\r
-                            };\r
-                            window["codemirror_" + editorInstance.id].commentRange(false, range.from, range.to);\r
-                            if (window["codemirror_" + editorInstance.id].config.autoFormatOnUncomment) {\r
-                                window["codemirror_" + editorInstance.id].autoFormatRange(\r
-                                    range.from,\r
-                                    range.to);\r
-                            }\r
-                        },\r
-                        canUndo: true\r
-                    },\r
-                    autoCompleteToggle: {\r
-                        modes: {\r
-                            wysiwyg: 0,\r
-                            source: 1\r
-                        },\r
-                        editorFocus: false,\r
-                        readOnly: 1,\r
-                        exec: function (editorInstance) {\r
-                            if (this.state == CKEDITOR.TRISTATE_ON) {\r
-                                window["codemirror_" + editorInstance.id].setOption("autoCloseTags", false);\r
-                            } else if (this.state == CKEDITOR.TRISTATE_OFF) {\r
-                                window["codemirror_" + editorInstance.id].setOption("autoCloseTags", true);\r
-                            }\r
-\r
-                            this.toggleState();\r
-                        },\r
-                        canUndo: true\r
-                    }\r
-                };\r
-            }\r
-\r
-            \r
-\r
-            \r
-            editor.addMode('source', function(callback) {\r
-                if (typeof (CodeMirror) == 'undefined') {\r
-                    \r
-                    CKEDITOR.document.appendStyleSheet(rootPath + 'css/codemirror.min.css');\r
-                    \r
-                    if (config.theme.length && config.theme != 'default') {\r
-                        CKEDITOR.document.appendStyleSheet(rootPath + 'theme/' + config.theme + '.css');\r
-                    }\r
-\r
-                    CKEDITOR.scriptLoader.load(rootPath + 'js/codemirror.min.js', function() {\r
-\r
-                        CKEDITOR.scriptLoader.load(getCodeMirrorScripts(), function() {\r
-                            loadCodeMirror(editor);\r
-                            callback();\r
-                        });\r
-                    });\r
-                    \r
-                    \r
-                } else {\r
-                    loadCodeMirror(editor);\r
-                    callback();\r
-                }\r
-            });\r
-\r
-            function getCodeMirrorScripts() {\r
-                var scriptFiles = [rootPath + 'js/codemirror.addons.min.js'];\r
-\r
-                switch (config.mode) {\r
-                case "htmlmixed":\r
-                    {\r
-                        scriptFiles.push(rootPath + 'js/codemirror.mode.htmlmixed.min.js');\r
-                    }\r
-\r
-                    break;\r
-                case "text/html":\r
-                    {\r
-                        scriptFiles.push(rootPath + 'js/codemirror.mode.htmlmixed.min.js');\r
-                    }\r
-\r
-                    break;\r
-                case "application/x-httpd-php":\r
-                    {\r
-                        scriptFiles.push(rootPath + 'js/codemirror.mode.php.min.js');\r
-                    }\r
-\r
-                    break;\r
-                case "text/javascript":\r
-                    {\r
-                        scriptFiles.push(rootPath + 'js/codemirror.mode.javascript.min.js');\r
-                    }\r
-\r
-                    break;\r
-                default:\r
-                    scriptFiles.push(rootPath + 'js/codemirror.mode.htmlmixed.min.js');\r
-                }\r
-\r
-                if (config.useBeautify) {\r
-                    scriptFiles.push(rootPath + 'js/beautify.min.js');\r
-                }\r
-\r
-                if (config.enableSearchTools) {\r
-                    scriptFiles.push(rootPath + 'js/codemirror.addons.search.min.js');\r
-                }\r
-                return scriptFiles;\r
-            }\r
-\r
-            function loadCodeMirror(editor) {\r
-                var contentsSpace = editor.ui.space('contents'),\r
-                    textarea = contentsSpace.getDocument().createElement('textarea');\r
-\r
-                textarea.setStyles(\r
-                    CKEDITOR.tools.extend({\r
-                        // IE7 has overflow the <textarea> from wrapping table cell.\r
-                        width: CKEDITOR.env.ie7Compat ? '99%' : '100%',\r
-                            height: '100%',\r
-                            resize: 'none',\r
-                            outline: 'none',\r
-                            'text-align': 'left'\r
-                        },\r
-                        CKEDITOR.tools.cssVendorPrefix('tab-size', editor.config.sourceAreaTabSize || 4)));\r
-                var ariaLabel = [editor.lang.editor, editor.name].join(',');\r
-                textarea.setAttributes({\r
-                    dir: 'ltr',\r
-                    tabIndex: CKEDITOR.env.webkit ? -1 : editor.tabIndex,\r
-                    'role': 'textbox',\r
-                    'aria-label': ariaLabel\r
-                });\r
-                textarea.addClass('cke_source cke_reset cke_enable_context_menu');\r
-                editor.ui.space('contents').append(textarea);\r
-                window["editable_" + editor.id] = editor.editable(new sourceEditable(editor, textarea));\r
-                // Fill the textarea with the current editor data.\r
-                window["editable_" + editor.id].setData(editor.getData(1));\r
-                window["editable_" + editor.id].editorID = editor.id;\r
-                editor.fire('ariaWidget', this);\r
-                var delay;\r
-                var sourceAreaElement = window["editable_" + editor.id],\r
-                    holderElement = sourceAreaElement.getParent();\r
-\r
-                //codemirror = editor.id;\r
-\r
-                /*CodeMirror.commands.autocomplete = function(cm) {\r
-                    CodeMirror.showHint(cm, CodeMirror.htmlHint);\r
-                };*/\r
-                \r
-                // Enable Code Folding (Requires 'lineNumbers' to be set to 'true')\r
-                if (config.lineNumbers && config.enableCodeFolding) {\r
-                    window["foldFunc_" + editor.id] = CodeMirror.newFoldFunction(CodeMirror.tagRangeFinder);\r
-                }\r
-\r
-                window["codemirror_" + editor.id] = CodeMirror.fromTextArea(sourceAreaElement.$, {\r
-                    mode: config.mode,\r
-                    matchBrackets: config.matchBrackets,\r
-                    matchTags: config.matchTags,\r
-                    workDelay: 300,\r
-                    workTime: 35,\r
-                    readOnly: editor.config.readOnly,\r
-                    lineNumbers: config.lineNumbers,\r
-                    lineWrapping: config.lineWrapping,\r
-                    autoCloseTags: config.autoCloseTags,\r
-                    autoCloseBrackets: config.autoCloseBrackets,\r
-                    highlightSelectionMatches: config.highlightMatches,\r
-                    continueComments: config.continueComments,\r
-                    indentWithTabs: config.indentWithTabs,\r
-                    theme: config.theme,\r
-                    showTrailingSpace: config.showTrailingSpace,\r
-                    showCursorWhenSelecting: true,\r
-                    //extraKeys: {"Ctrl-Space": "autocomplete"},\r
-                    extraKeys: { "Ctrl-Q": function(codeMirror_Editor) { window["foldFunc_" + editor.id](codeMirror_Editor, codeMirror_Editor.getCursor().line); } },\r
-                    onKeyEvent: function(codeMirror_Editor, evt) {\r
-                        if (config.enableCodeFormatting) {\r
-                            var range = getSelectedRange();\r
-                            if (evt.type === "keydown" && evt.ctrlKey && evt.keyCode === 75 && !evt.shiftKey && !evt.altKey) {\r
-                                window["codemirror_" + editor.id].commentRange(true, range.from, range.to);\r
-                            } else if (evt.type === "keydown" && evt.ctrlKey && evt.keyCode === 75 && evt.shiftKey && !evt.altKey) {\r
-                                window["codemirror_" + editor.id].commentRange(false, range.from, range.to);\r
-                                if (config.autoFormatOnUncomment) {\r
-                                    window["codemirror_" + editor.id].autoFormatRange(range.from, range.to);\r
-                                }\r
-                            } else if (evt.type === "keydown" && evt.ctrlKey && evt.keyCode === 75 && !evt.shiftKey && evt.altKey) {\r
-                                window["codemirror_" + editor.id].autoFormatRange(range.from, range.to);\r
-                            }/* else if (evt.type === "keydown") {\r
-                                CodeMirror.commands.newlineAndIndentContinueMarkdownList(window["codemirror_" + editor.id]);\r
-                            }*/\r
-                        }\r
-                    }\r
-                });\r
-\r
-                var holderHeight = holderElement.$.clientHeight + 'px';\r
-                var holderWidth = holderElement.$.clientWidth + 'px';\r
-\r
-                // Store config so we can access it within commands etc.\r
-                window["codemirror_" + editor.id].config = config;\r
-                if (config.autoFormatOnStart) {\r
-                    if (config.useBeautify) {\r
-                        var indent_size = 4;\r
-                        var indent_char = ' ';\r
-                        var brace_style = 'collapse'; //collapse, expand, end-expand \r
-\r
-                        var source = window["codemirror_" + editor.id].getValue();\r
-\r
-                        window["codemirror_" + editor.id].setValue(html_beautify(source, indent_size, indent_char, 120, brace_style));\r
-                    } else {\r
-                        window["codemirror_" + editor.id].autoFormatAll({\r
-                            line: 0,\r
-                            ch: 0\r
-                        }, {\r
-                            line: window["codemirror_" + editor.id].lineCount(),\r
-                            ch: 0\r
-                        });\r
-                    }\r
-                }\r
-\r
-                function getSelectedRange() {\r
-                    return {\r
-                        from: window["codemirror_" + editor.id].getCursor(true),\r
-                        to: window["codemirror_" + editor.id].getCursor(false)\r
-                    };\r
-                }\r
-\r
-                window["codemirror_" + editor.id].on("change", function () {\r
-                    clearTimeout(delay);\r
-                    delay = setTimeout(function () {\r
-                        var cm = window["codemirror_" + editor.id];\r
-                    \r
-                        if (cm) {\r
-                            cm.save();\r
-                        }\r
-                    }, 300);\r
-                });\r
-                window["codemirror_" + editor.id].setSize(holderWidth, holderHeight);\r
-                \r
-                // Enable Code Folding (Requires 'lineNumbers' to be set to 'true')\r
-                if (config.lineNumbers && config.enableCodeFolding) {\r
-                    window["codemirror_" + editor.id].on("gutterClick", window["foldFunc_" + editor.id]);\r
-                }\r
-                // Highlight Active Line\r
-                if (config.highlightActiveLine) {\r
-                    window["codemirror_" + editor.id].hlLine = window["codemirror_" + editor.id].addLineClass(0, "background", "activeline");\r
-                    window["codemirror_" + editor.id].on("cursorActivity", function () {\r
-                        try {\r
-                            var cur = window["codemirror_" + editor.id].getLineHandle(window["codemirror_" + editor.id].getCursor().line);\r
-                        } catch(e) {\r
-                            cur = null;\r
-                        } finally {\r
-                            if (cur != null) {\r
-                                if (cur != window["codemirror_" + editor.id].hlLine) {\r
-                                    window["codemirror_" + editor.id].removeLineClass(window["codemirror_" + editor.id].hlLine, "background", "activeline");\r
-                                    window["codemirror_" + editor.id].hlLine = window["codemirror_" + editor.id].addLineClass(cur, "background", "activeline");\r
-                                }\r
-                            }\r
-                        }\r
-                    });\r
-                }\r
-\r
-                // Run config.onLoad callback, if present.\r
-                if (typeof config.onLoad === 'function') {\r
-                    config.onLoad(window["codemirror_" + editor.id], editor);\r
-                }\r
-            }\r
-\r
-            editor.addCommand('source', sourcearea.commands.source);\r
-            if (editor.ui.addButton) {\r
-                editor.ui.addButton('Source', {\r
-                    label: editor.lang.codemirror.toolbar,\r
-                    command: 'source',\r
-                    toolbar: 'mode,10'\r
-                });\r
-            }\r
-            if (config.enableCodeFormatting) {\r
-                editor.addCommand('searchCode', sourcearea.commands.searchCode);\r
-                editor.addCommand('autoFormat', sourcearea.commands.autoFormat);\r
-                editor.addCommand('commentSelectedRange', sourcearea.commands.commentSelectedRange);\r
-                editor.addCommand('uncommentSelectedRange', sourcearea.commands.uncommentSelectedRange);\r
-                editor.addCommand('autoCompleteToggle', sourcearea.commands.autoCompleteToggle);\r
-\r
-                if (editor.ui.addButton) {\r
-                    if (config.showFormatButton || config.showCommentButton || config.showUncommentButton || config.showSearchButton) {\r
-                        editor.ui.add('-', CKEDITOR.UI_SEPARATOR, { toolbar: 'mode,30' });\r
-                    }\r
-                    if (config.showSearchButton && config.enableSearchTools) {\r
-                        editor.ui.addButton('searchCode', {\r
-                            label: lang.searchCode,\r
-                            command: 'searchCode',\r
-                            toolbar: 'mode,40'\r
-                        });\r
-                    }\r
-                    if (config.showFormatButton) {\r
-                        editor.ui.addButton('autoFormat', {\r
-                            label: lang.autoFormat,\r
-                            command: 'autoFormat',\r
-                            toolbar: 'mode,50'\r
-                        });\r
-                    }\r
-                    if (config.showCommentButton) {\r
-                        editor.ui.addButton('CommentSelectedRange', {\r
-                            label: lang.commentSelectedRange,\r
-                            command: 'commentSelectedRange',\r
-                            toolbar: 'mode,60'\r
-                        });\r
-                    }\r
-                    if (config.showUncommentButton) {\r
-                        editor.ui.addButton('UncommentSelectedRange', {\r
-                            label: lang.uncommentSelectedRange,\r
-                            command: 'uncommentSelectedRange',\r
-                            toolbar: 'mode,70'\r
-                        });\r
-                    }\r
-                    if (config.showAutoCompleteButton) {\r
-                        editor.ui.addButton('AutoComplete', {\r
-                            label: lang.autoCompleteToggle,\r
-                            command: 'autoCompleteToggle',\r
-                            toolbar: 'mode,80'\r
-                        });\r
-                    }\r
-                }\r
-            }\r
-            \r
-            editor.on('beforeModeUnload', function (evt) {\r
-                if (editor.mode === 'source' && editor.plugins.textselection) {\r
-                    var range = editor.getTextSelection();\r
-\r
-                    range.startOffset = LineChanngelToOffSet(window["codemirror_" + editor.id], window["codemirror_" + editor.id].getCursor(true));\r
-                    range.endOffset = LineChanngelToOffSet(window["codemirror_" + editor.id], window["codemirror_" + editor.id].getCursor(false));\r
-\r
-                    // Fly the range when create bookmark. \r
-                    delete range.element;\r
-                    range.createBookmark();\r
-                    sourceBookmark = true;\r
-                    evt.data = range.content;\r
-                }\r
-            });\r
-            editor.on('mode', function () {\r
-                editor.getCommand('source').setState(editor.mode === 'source' ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF);\r
-\r
-                if (editor.mode === 'source') {\r
-                    editor.getCommand('autoCompleteToggle').setState(window["codemirror_" + editor.id].config.autoCloseTags ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF);\r
-                    \r
-\r
-                    if (editor.plugins.textselection && textRange) {\r
-                        textRange.element = new CKEDITOR.dom.element(editor._.editable.$);\r
-                        textRange.select();\r
-\r
-                        var start, end;\r
-\r
-                        start = OffSetToLineChannel(window["codemirror_" + editor.id], textRange.startOffset);\r
-\r
-                        if (typeof (textRange.endOffset) == 'undefined') {\r
-                            window["codemirror_" + editor.id].setCursor(start);\r
-                        } else {\r
-                            end = OffSetToLineChannel(window["codemirror_" + editor.id], textRange.endOffset);\r
-                            window["codemirror_" + editor.id].setSelection(start, end);\r
-                        }\r
-                    }\r
-                }\r
-\r
-            });\r
-            editor.on('resize', function() {\r
-                if (window["editable_" + editor.id] && editor.mode === 'source') {\r
-                    var holderElement = window["editable_" + editor.id].getParent();\r
-                    var holderHeight = holderElement.$.clientHeight + 'px';\r
-                    var holderWidth = holderElement.$.clientWidth + 'px';\r
-                    window["codemirror_" + editor.id].setSize(holderWidth, holderHeight);\r
-                }\r
-            });\r
-            \r
-            editor.on('readOnly', function () {\r
-                if (window["editable_" + editor.id] && editor.mode === 'source') {\r
-                    window["codemirror_" + editor.id].setOption("readOnly", this.readOnly);\r
-                }\r
-            });\r
-            \r
-            editor.on('instanceReady', function () {\r
-                var selectAllCommand = editor.commands.selectAll;\r
-\r
-                // Replace Complete SelectAll command from the plugin, otherwise it will not work in IE10\r
-                if (selectAllCommand != null) {\r
-                    selectAllCommand.exec = function () {\r
-                        if (editor.mode === 'source') {\r
-                            window["codemirror_" + editor.id].setSelection({\r
-                                line: 0,\r
-                                ch: 0\r
-                            }, {\r
-                                line: window["codemirror_" + editor.id].lineCount(),\r
-                                ch: 0\r
-                            });\r
-                        } else {\r
-                            var editable = editor.editable();\r
-                            if (editable.is('body'))\r
-                                editor.document.$.execCommand('SelectAll', false, null);\r
-                            else {\r
-                                var range = editor.createRange();\r
-                                range.selectNodeContents(editable);\r
-                                range.select();\r
-                            }\r
-\r
-                            // Force triggering selectionChange (#7008)\r
-                            editor.forceNextSelectionCheck();\r
-                            editor.selectionChange();\r
-                        }\r
-                    };\r
-                }\r
-            });\r
-\r
-            editor.on('setData', function (data) {\r
-                if (window["editable_" + editor.id] && editor.mode === 'source') {\r
-                    window["codemirror_" + editor.id].setValue(data.data.dataValue);\r
-                }\r
-            });\r
-        }\r
-    });\r
-    var sourceEditable = CKEDITOR.tools.createClass({\r
-        base: CKEDITOR.editable,\r
-        proto: {\r
-            setData: function(data) {\r
-                this.setValue(data);\r
-\r
-                if (this.codeMirror != null) {\r
-                    this.codeMirror.setValue(data);\r
-                }\r
-\r
-                this.editor.fire('dataReady');\r
-            },\r
-            getData: function() {\r
-                return this.getValue();\r
-            },\r
-            // Insertions are not supported in source editable.\r
-            insertHtml: function() {\r
-            },\r
-            insertElement: function() {\r
-            },\r
-            insertText: function() {\r
-            },\r
-            // Read-only support for textarea.\r
-            setReadOnly: function(isReadOnly) {\r
-                this[(isReadOnly ? 'set' : 'remove') + 'Attribute']('readOnly', 'readonly');\r
-            },\r
-            editorID: null,\r
-            detach: function() {\r
-                window["codemirror_" + this.editorID].toTextArea();\r
-                \r
-                // Free Memory on destroy\r
-                window["editable_" + this.editorID] = null;\r
-                window["codemirror_" + this.editorID] = null;\r
-\r
-                sourceEditable.baseProto.detach.call(this);\r
-                \r
-                this.clearCustomData();\r
-                this.remove();\r
-            }\r
-        }\r
-    });\r
-})();\r
-CKEDITOR.plugins.sourcearea = {\r
-    commands: {\r
-        source: {\r
-            modes: {\r
-                wysiwyg: 1,\r
-                source: 1\r
-            },\r
-            editorFocus: false,\r
-            readOnly: 1,\r
-            exec: function(editor) {\r
-                if (editor.mode === 'wysiwyg') {\r
-                    editor.fire('saveSnapshot');\r
-                }\r
-\r
-                editor.getCommand('source').setState(CKEDITOR.TRISTATE_DISABLED);\r
-                editor.setMode(editor.mode === 'source' ? 'wysiwyg' : 'source');\r
-            },\r
-            canUndo: false\r
-        },\r
-        searchCode: {\r
-            modes: {\r
-                wysiwyg: 0,\r
-                source: 1\r
-            },\r
-            editorFocus: false,\r
-            readOnly: 1,\r
-            exec: function(editor) {\r
-                CodeMirror.commands.find(window["codemirror_" + editor.id]);\r
-            },\r
-            canUndo: true\r
-        },\r
-        autoFormat: {\r
-            modes: {\r
-                wysiwyg: 0,\r
-                source: 1\r
-            },\r
-            editorFocus: false,\r
-            readOnly: 1,\r
-            exec: function(editor) {\r
-                var range = {\r
-                    from: window["codemirror_" + editor.id].getCursor(true),\r
-                    to: window["codemirror_" + editor.id].getCursor(false)\r
-                };\r
-                window["codemirror_" + editor.id].autoFormatRange(range.from, range.to);\r
-            },\r
-            canUndo: true\r
-        },\r
-        commentSelectedRange: {\r
-            modes: {\r
-                wysiwyg: 0,\r
-                source: 1\r
-            },\r
-            editorFocus: false,\r
-            readOnly: 1,\r
-            exec: function(editor) {\r
-                var range = {\r
-                    from: window["codemirror_" + editor.id].getCursor(true),\r
-                    to: window["codemirror_" + editor.id].getCursor(false)\r
-                };\r
-                window["codemirror_" + editor.id].commentRange(true, range.from, range.to);\r
-            },\r
-            canUndo: true\r
-        },\r
-        uncommentSelectedRange: {\r
-            modes: {\r
-                wysiwyg: 0,\r
-                source: 1\r
-            },\r
-            editorFocus: false,\r
-            readOnly: 1,\r
-            exec: function(editor) {\r
-                var range = {\r
-                    from: window["codemirror_" + editor.id].getCursor(true),\r
-                    to: window["codemirror_" + editor.id].getCursor(false)\r
-                };\r
-                window["codemirror_" + editor.id].commentRange(false, range.from, range.to);\r
-                if (window["codemirror_" + editor.id].config.autoFormatOnUncomment) {\r
-                    window["codemirror_" + editor.id].autoFormatRange(\r
-                        range.from,\r
-                        range.to);\r
-                }\r
-            },\r
-            canUndo: true\r
-        },\r
-        autoCompleteToggle: {\r
-            modes: {\r
-                wysiwyg: 0,\r
-                source: 1\r
-            },\r
-            editorFocus: false,\r
-            readOnly: 1,\r
-            exec: function (editor) {\r
-                if (this.state == CKEDITOR.TRISTATE_ON) {\r
-                    window["codemirror_" + editor.id].setOption("autoCloseTags", false);\r
-                } else if (this.state == CKEDITOR.TRISTATE_OFF) {\r
-                    window["codemirror_" + editor.id].setOption("autoCloseTags", true);\r
-                }\r
-\r
-                this.toggleState();\r
-            },\r
-            canUndo: true\r
-        }\r
-    }\r
-};\r
-\r
-function LineChanngelToOffSet(ed, linech) {\r
-    var line = linech.line;\r
-    var ch = linech.ch;\r
-    var n = line + ch; //for the \n s & chars in the line\r
-    for (i = 0; i < line; i++) {\r
-        n += (ed.getLine(i)).length;//for the chars in all preceeding lines\r
-    }\r
-    return n;\r
-}\r
-\r
-function OffSetToLineChannel(ed, n) {\r
-    var line = 0, ch = 0, index = 0;\r
-    for (i = 0; i < ed.lineCount() ; i++) {\r
-        len = (ed.getLine(i)).length;\r
-        if (n < index + len) {\r
-            //alert(len+","+index+","+(n-index));\r
-            line = i;\r
-            ch = n - index;\r
-            return { line: line, ch: ch };\r
-        }\r
-        len++;//for \n char\r
-        index += len;\r
-    }\r
-    return { line: line, ch: ch };\r
-}
\ No newline at end of file