From a740ef91e6689f86011b70c7bbe2589abf78ae6b Mon Sep 17 00:00:00 2001 From: patdenice Date: Tue, 12 Apr 2011 11:12:51 +0000 Subject: feature:2262 Replace editarea by Codemirror: http://codemirror.net git-svn-id: http://piwigo.org/svn/trunk@10307 68402e56-0260-453c-a942-63ccdbb3a9ee --- .../codemirror/mode/htmlmixed/htmlmixed.js | 66 ++++++++++++++++++++++ .../codemirror/mode/htmlmixed/index.html | 54 ++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 plugins/LocalFilesEditor/codemirror/mode/htmlmixed/htmlmixed.js create mode 100644 plugins/LocalFilesEditor/codemirror/mode/htmlmixed/index.html (limited to 'plugins/LocalFilesEditor/codemirror/mode/htmlmixed') diff --git a/plugins/LocalFilesEditor/codemirror/mode/htmlmixed/htmlmixed.js b/plugins/LocalFilesEditor/codemirror/mode/htmlmixed/htmlmixed.js new file mode 100644 index 000000000..8d7165201 --- /dev/null +++ b/plugins/LocalFilesEditor/codemirror/mode/htmlmixed/htmlmixed.js @@ -0,0 +1,66 @@ +CodeMirror.defineMode("htmlmixed", function(config, parserConfig) { + var htmlMode = CodeMirror.getMode(config, {name: "xml", htmlMode: true}); + var jsMode = CodeMirror.getMode(config, "javascript"); + var cssMode = CodeMirror.getMode(config, "css"); + + function html(stream, state) { + var style = htmlMode.token(stream, state.htmlState); + if (style == "xml-tag" && stream.current() == ">" && state.htmlState.context) { + if (/^script$/i.test(state.htmlState.context.tagName)) { + state.token = javascript; + state.localState = jsMode.startState(htmlMode.indent(state.htmlState, "")); + } + else if (/^style$/i.test(state.htmlState.context.tagName)) { + state.token = css; + state.localState = cssMode.startState(htmlMode.indent(state.htmlState, "")); + } + } + return style; + } + function javascript(stream, state) { + if (stream.match(/^<\/\s*script\s*>/i, false)) { + state.token = html; + state.curState = null; + return html(stream, state); + } + return jsMode.token(stream, state.localState); + } + function css(stream, state) { + if (stream.match(/^<\/\s*style\s*>/i, false)) { + state.token = html; + state.localState = null; + return html(stream, state); + } + return cssMode.token(stream, state.localState); + } + + return { + startState: function() { + var state = htmlMode.startState(); + return {token: html, localState: null, htmlState: state}; + }, + + copyState: function(state) { + if (state.localState) + var local = CodeMirror.copyState(state.token == css ? cssMode : jsMode, state.localState); + return {token: state.token, localState: local, htmlState: CodeMirror.copyState(htmlMode, state.htmlState)}; + }, + + token: function(stream, state) { + return state.token(stream, state); + }, + + indent: function(state, textAfter) { + if (state.token == html || /^\s*<\//.test(textAfter)) + return htmlMode.indent(state.htmlState, textAfter); + else if (state.token == javascript) + return jsMode.indent(state.localState, textAfter); + else + return cssMode.indent(state.localState, textAfter); + }, + + electricChars: "/{}:" + } +}); + +CodeMirror.defineMIME("text/html", "htmlmixed"); diff --git a/plugins/LocalFilesEditor/codemirror/mode/htmlmixed/index.html b/plugins/LocalFilesEditor/codemirror/mode/htmlmixed/index.html new file mode 100644 index 000000000..c661c98d5 --- /dev/null +++ b/plugins/LocalFilesEditor/codemirror/mode/htmlmixed/index.html @@ -0,0 +1,54 @@ + + + + CodeMirror 2: HTML mixed mode + + + + + + + + + + + + + +

CodeMirror 2: HTML mixed mode

+
+ + +

The HTML mixed mode depends on the XML, JavaScript, and CSS modes.

+ +

MIME types defined: text/html + (redefined, only takes effect if you load this parser after the + XML parser).

+ + + -- cgit v1.2.3