codemirror.init.js 5.7 KB

1
  1. function completeAfter(cm, pred) { var cur = cm.getCursor(); if (!pred || pred()) setTimeout(function () { if (!cm.state.completionActive) cm.showHint({ completeSingle: false }); }, 100); return CodeMirror.Pass; } function completeIfAfterLt(cm) { return completeAfter(cm, function () { var cur = cm.getCursor(); return cm.getRange(CodeMirror.Pos(cur.line, cur.ch - 1), cur) == "<"; }); } function completeIfInTag(cm) { return completeAfter(cm, function () { var tok = cm.getTokenAt(cm.getCursor()); if (tok.type == "string" && (!/['"]/.test(tok.string.charAt(tok.string.length - 1)) || tok.string.length == 1)) return false; var inner = CodeMirror.innerMode(cm.getMode(), tok.state).state; return inner.tagName; }); } function setOnload(mode) { window.onload = function () { if (window.navigator.userAgent.indexOf("MSIE") >= 1) { document.getElementById("code").style.display = "none"; } else { var txt = document.querySelector('textarea[name=nrwj]'); //初始化编辑器 var editor = document.getElementById("code"); //editor.style.cssText = 'width:'+$(txt).width()+';height:'+$(txt).height(); codemirrorEditor = CodeMirror(editor, { mode: mode, lineNumbers: true, extraKeys: { "'.'": completeAfter, "'<'": completeAfter, "'/'": completeIfAfterLt, "' '": completeIfInTag, "'='": completeIfInTag, "Alt-/": "autocomplete" }, value: document.querySelector("textarea[name=nrwj]").value }); txt.style.display = "none"; txt.form.onsubmit = submitbj; var changeText = ""; codemirrorEditor.on("change", function (instance, changeobj) { if (changeobj.text) { changeText = codemirrorEditor.getLine(changeobj.to.line).replace(/^\s+|\s+$/g, '') } if (changeText) $("[name=tjxx]").val((changeText + " ").slice(-300, -1)) txt.value = codemirrorEditor.getValue(); txt.change&&txt.change(); }) } }; } function initJsEditor() { setOnload("text/javascript"); } function initHtmlEditor() { setOnload("text/html"); } function initXmlEditor() { setOnload("application/xml"); } function initCssEditor() { setOnload("text/css"); } function submitbj() { //提交表单前执行此方法 $("input[type='checkbox']").each(function () { if (!$(this).is(':checked')) { $(this).val(0); } $(this).prop("checked", "true"); }); if (typeof(codemirrorEditor) != 'undefined') { document.querySelector('textarea[name=nrwj]').value = codemirrorEditor.getValue(); } //with (document.buJianShuXingForm) { //增加应用功能部件19by小庄 // submit(); //} } // 再增加,页面统一用。Lin // 来自 codemirror.init.js 之 setOnload(mode) // 去掉 window.onload =,改为普通方法 -- 由页面决定 function initCmEditor(mode) { /* 去掉 window.onload =,改为普通方法 -- 由页面决定。Lin window.onload = function () { */ /// 再增加,使用逻辑的 mode 名。Lin var modeStr; switch (mode) { case "js": modeStr = "text/javascript"; break; case "html": modeStr = "text/html"; break; case "css": modeStr = "text/css"; break; default: modeStr = "application/xml"; } /// if (window.navigator.userAgent.indexOf("MSIE") >= 1) { document.getElementById("code").style.display = "none"; } else { /* 再移到下面用到的地方。Lin var txt = document.querySelector('textarea[name=nrwj]'); */ //初始化编辑器 var editor = document.getElementById("code"); //editor.style.cssText = 'width:'+$(txt).width()+';height:'+$(txt).height(); codemirrorEditor = CodeMirror(editor, { mode: modeStr, // : mode,。Lin lineNumbers: true, /// 再增加。Lin indentUnit: 4, indentWithTabs: true, /* 不起作用,奇怪???Lin highlightActiveLine: true, styleActiveLine: true, */ /// extraKeys: { "'.'": completeAfter, "'<'": completeAfter, "'/'": completeIfAfterLt, "' '": completeIfInTag, "'='": completeIfInTag, "Alt-/": "autocomplete" }, /* 再去掉,移到 CodeMirror( 外面 -- 下面 -- 页面可以没有 <textarea name="nrwj"。Lin value: document.querySelector("textarea[name=nrwj]").value */ }); /// 从上面移到这。Lin var txt = document.querySelector('textarea[name=nrwj]'); /// /// 再增加,页面可以没有 <textarea name="nrwj"。Lin if (!txt) return; /// /// 再增加,从 CodeMirror( 里面移到这 -- 页面可以没有 <textarea name="nrwj"。Lin // value: document.querySelector("textarea[name=nrwj]").value codemirrorEditor.setValue(txt.value); /// txt.style.display = "none"; /* 再改,避免抛出错误 -- 页面可能没写 <form。Lin txt.form.onsubmit = submitbj; */ if (txt.form) txt.form.onsubmit = submitbj; var changeText = ""; codemirrorEditor.on("change", function (instance, changeobj) { if (changeobj.text) { changeText = codemirrorEditor.getLine(changeobj.to.line).replace(/^\s+|\s+$/g, '') } if (changeText) $("[name=tjxx]").val((changeText + " ").slice(-300, -1)) txt.value = codemirrorEditor.getValue(); txt.change&&txt.change(); }) } /* 去掉 window.onload =,改为普通方法 -- 由页面决定。Lin }; */ }