123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- /*!
- * Code block dialog plugin for Editor.md
- *
- * @file code-block-dialog.js
- * @author pandao
- * @version 1.2.0
- * @updateTime 2015-03-07
- * {@link https://github.com/pandao/editor.md}
- * @license MIT
- */
- (function() {
- var factory = function (exports) {
- var cmEditor;
- var pluginName = "code-block-dialog";
-
- // for CodeBlock dialog select
- var codeLanguages = exports.codeLanguages = {
- asp : ["ASP", "vbscript"],
- actionscript : ["ActionScript(3.0)/Flash/Flex", "clike"],
- bash : ["Bash/Bat", "shell"],
- css : ["CSS", "css"],
- c : ["C", "clike"],
- cpp : ["C++", "clike"],
- csharp : ["C#", "clike"],
- coffeescript : ["CoffeeScript", "coffeescript"],
- d : ["D", "d"],
- dart : ["Dart", "dart"],
- delphi : ["Delphi/Pascal", "pascal"],
- erlang : ["Erlang", "erlang"],
- go : ["Golang", "go"],
- groovy : ["Groovy", "groovy"],
- html : ["HTML", "text/html"],
- java : ["Java", "clike"],
- json : ["JSON", "text/json"],
- javascript : ["Javascript", "javascript"],
- lua : ["Lua", "lua"],
- less : ["LESS", "css"],
- markdown : ["Markdown", "gfm"],
- "objective-c" : ["Objective-C", "clike"],
- php : ["PHP", "php"],
- perl : ["Perl", "perl"],
- python : ["Python", "python"],
- r : ["R", "r"],
- rst : ["reStructedText", "rst"],
- ruby : ["Ruby", "ruby"],
- sql : ["SQL", "sql"],
- sass : ["SASS/SCSS", "sass"],
- shell : ["Shell", "shell"],
- scala : ["Scala", "clike"],
- swift : ["Swift", "clike"],
- vb : ["VB/VBScript", "vb"],
- xml : ["XML", "text/xml"],
- yaml : ["YAML", "yaml"]
- };
- exports.fn.codeBlockDialog = function() {
- var _this = this;
- var cm = this.cm;
- var lang = this.lang;
- var editor = this.editor;
- var settings = this.settings;
- var cursor = cm.getCursor();
- var selection = cm.getSelection();
- var classPrefix = this.classPrefix;
- var dialogName = classPrefix + pluginName, dialog;
- var dialogLang = lang.dialog.codeBlock;
- cm.focus();
- if (editor.find("." + dialogName).length > 0)
- {
- dialog = editor.find("." + dialogName);
- dialog.find("option:first").attr("selected", "selected");
- dialog.find("textarea").val(selection);
- this.dialogShowMask(dialog);
- this.dialogLockScreen();
- dialog.show();
- }
- else
- {
- var dialogHTML = "<div class=\"" + classPrefix + "code-toolbar\">" +
- dialogLang.selectLabel + "<select><option selected=\"selected\" value=\"\">" + dialogLang.selectDefaultText + "</option></select>" +
- "</div>" +
- "<textarea placeholder=\"coding now....\" style=\"display:none;\">" + selection + "</textarea>";
- dialog = this.createDialog({
- name : dialogName,
- title : dialogLang.title,
- width : 780,
- height : 565,
- mask : settings.dialogShowMask,
- drag : settings.dialogDraggable,
- content : dialogHTML,
- lockScreen : settings.dialogLockScreen,
- maskStyle : {
- opacity : settings.dialogMaskOpacity,
- backgroundColor : settings.dialogMaskBgColor
- },
- buttons : {
- enter : [lang.buttons.enter, function() {
- var codeTexts = this.find("textarea").val();
- var langName = this.find("select").val();
- if (langName === "")
- {
- alert(lang.dialog.codeBlock.unselectedLanguageAlert);
- return false;
- }
- if (codeTexts === "")
- {
- alert(lang.dialog.codeBlock.codeEmptyAlert);
- return false;
- }
- langName = (langName === "other") ? "" : langName;
- cm.replaceSelection(["```" + langName, codeTexts, "```"].join("\n"));
- if (langName === "") {
- cm.setCursor(cursor.line, cursor.ch + 3);
- }
- this.hide().lockScreen(false).hideMask();
- return false;
- }],
- cancel : [lang.buttons.cancel, function() {
- this.hide().lockScreen(false).hideMask();
- return false;
- }]
- }
- });
- }
- var langSelect = dialog.find("select");
- if (langSelect.find("option").length === 1)
- {
- for (var key in codeLanguages)
- {
- var codeLang = codeLanguages[key];
- langSelect.append("<option value=\"" + key + "\" mode=\"" + codeLang[1] + "\">" + codeLang[0] + "</option>");
- }
- langSelect.append("<option value=\"other\">" + dialogLang.otherLanguage + "</option>");
- }
-
- var mode = langSelect.find("option:selected").attr("mode");
-
- var cmConfig = {
- mode : (mode) ? mode : "text/html",
- theme : settings.theme,
- tabSize : 4,
- autofocus : true,
- autoCloseTags : true,
- indentUnit : 4,
- lineNumbers : true,
- lineWrapping : true,
- extraKeys : {"Ctrl-Q": function(cm){ cm.foldCode(cm.getCursor()); }},
- foldGutter : true,
- gutters : ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
- matchBrackets : true,
- indentWithTabs : true,
- styleActiveLine : true,
- styleSelectedText : true,
- autoCloseBrackets : true,
- showTrailingSpace : true,
- highlightSelectionMatches : true
- };
-
- var textarea = dialog.find("textarea");
- var cmObj = dialog.find(".CodeMirror");
- if (dialog.find(".CodeMirror").length < 1)
- {
- cmEditor = exports.$CodeMirror.fromTextArea(textarea[0], cmConfig);
- cmObj = dialog.find(".CodeMirror");
- cmObj.css({
- "float" : "none",
- margin : "8px 0",
- border : "1px solid #ddd",
- fontSize : settings.fontSize,
- width : "100%",
- height : "390px"
- });
- cmEditor.on("change", function(cm) {
- textarea.val(cm.getValue());
- });
- }
- else
- {
- cmEditor.setValue(cm.getSelection());
- }
- langSelect.change(function(){
- var _mode = $(this).find("option:selected").attr("mode");
- cmEditor.setOption("mode", _mode);
- });
- };
- };
-
- // CommonJS/Node.js
- if (typeof require === "function" && typeof exports === "object" && typeof module === "object")
- {
- module.exports = factory;
- }
- else if (typeof define === "function") // AMD/CMD/Sea.js
- {
- if (define.amd) { // for Require.js
- define(["editormd"], function(editormd) {
- factory(editormd);
- });
- } else { // for Sea.js
- define(function(require) {
- var editormd = require("./../../editormd");
- factory(editormd);
- });
- }
- }
- else
- {
- factory(window.editormd);
- }
- })();
|