diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb index e7555f927..28940db10 100644 --- a/app/controllers/shixuns_controller.rb +++ b/app/controllers/shixuns_controller.rb @@ -10,7 +10,7 @@ class ShixunsController < ApplicationController before_action :find_shixun, except: [:index, :new, :create, :menus, :get_recommend_shixuns, :propaedeutics, :departments, :apply_shixun_mirror, - :get_mirror_script, :download_file, :shixun_list] + :get_mirror_script, :download_file, :shixun_list, :batch_send_to_course] before_action :shixun_access_allowed, except: [:index, :new, :create, :menus, :get_recommend_shixuns, :propaedeutics, :departments, :apply_shixun_mirror, @@ -990,6 +990,16 @@ class ShixunsController < ApplicationController CreateStudentWorkJob.perform_later(homework.id) end + # 批量发送 + def batch_send_to_course + @course = Course.find_by!(id: params[:course_id]) + shixuns = Shixun.where(id: params[:shixun_ids]).unhidden + shixuns.each do |shixun| + homework = HomeworksService.new.create_homework shixun, @course, nil, current_user + CreateStudentWorkJob.perform_later(homework.id) + end + end + # 二维码扫描下载 def download_file file_path = params[:file_name] diff --git a/app/views/shixuns/batch_send_to_course.json.jbuilder b/app/views/shixuns/batch_send_to_course.json.jbuilder new file mode 100644 index 000000000..bd9002842 --- /dev/null +++ b/app/views/shixuns/batch_send_to_course.json.jbuilder @@ -0,0 +1,4 @@ +json.status 1 +json.message "发送成功" +json.course_id @course.id +json.first_category_url module_url(@course.none_hidden_course_modules.first, @course) \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 577428c7a..aa4aad8ec 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -224,6 +224,7 @@ Rails.application.routes.draw do post :apply_shixun_mirror get :download_file get :shixun_lists + post :batch_send_to_course end member do diff --git a/public/editormd/plugins/code-block-dialog/code-block-dialog.js b/public/editormd/plugins/code-block-dialog/code-block-dialog.js index 0e89e37f4..09078f146 100644 --- a/public/editormd/plugins/code-block-dialog/code-block-dialog.js +++ b/public/editormd/plugins/code-block-dialog/code-block-dialog.js @@ -1,237 +1,238 @@ -/*! - * 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 = "
" + - dialogLang.selectLabel + "" + - "
" + - ""; - - 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(""); - } - - langSelect.append(""); - } - - 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); - } - -})(); +/*! + * 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 = "
" + + dialogLang.selectLabel + "" + + "
" + + ""; + + 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(); + + cm.focus && cm.focus(); + return false; + }], + cancel : [lang.buttons.cancel, function() { + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + return false; + }] + } + }); + } + + var langSelect = dialog.find("select"); + + if (langSelect.find("option").length === 1) + { + for (var key in codeLanguages) + { + var codeLang = codeLanguages[key]; + langSelect.append(""); + } + + langSelect.append(""); + } + + 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); + } + +})(); diff --git a/public/editormd/plugins/emoji-dialog/emoji-dialog.js b/public/editormd/plugins/emoji-dialog/emoji-dialog.js index c85bcbb74..e1d4b9c4f 100644 --- a/public/editormd/plugins/emoji-dialog/emoji-dialog.js +++ b/public/editormd/plugins/emoji-dialog/emoji-dialog.js @@ -1,327 +1,329 @@ -/*! - * Emoji dialog plugin for Editor.md - * - * @file emoji-dialog.js - * @author pandao - * @version 1.2.0 - * @updateTime 2015-03-08 - * {@link https://github.com/pandao/editor.md} - * @license MIT - */ - -(function() { - - var factory = function (exports) { - - var $ = jQuery; - var pluginName = "emoji-dialog"; - var emojiTabIndex = 0; - var emojiData = []; - var selecteds = []; - - var logoPrefix = "editormd-logo"; - var logos = [ - logoPrefix, - logoPrefix + "-1x", - logoPrefix + "-2x", - logoPrefix + "-3x", - logoPrefix + "-4x", - logoPrefix + "-5x", - logoPrefix + "-6x", - logoPrefix + "-7x", - logoPrefix + "-8x" - ]; - - var langs = { - "zh-cn" : { - toolbar : { - emoji : "Emoji 表情" - }, - dialog : { - emoji : { - title : "Emoji 表情" - } - } - }, - "zh-tw" : { - toolbar : { - emoji : "Emoji 表情" - }, - dialog : { - emoji : { - title : "Emoji 表情" - } - } - }, - "en" : { - toolbar : { - emoji : "Emoji" - }, - dialog : { - emoji : { - title : "Emoji" - } - } - } - }; - - exports.fn.emojiDialog = function() { - var _this = this; - var cm = this.cm; - var settings = _this.settings; - - if (!settings.emoji) - { - alert("settings.emoji == false"); - return ; - } - - var path = settings.pluginPath + pluginName + "/"; - var editor = this.editor; - var cursor = cm.getCursor(); - var selection = cm.getSelection(); - var classPrefix = this.classPrefix; - - $.extend(true, this.lang, langs[this.lang.name]); - this.setToolbar(); - - var lang = this.lang; - var dialogName = classPrefix + pluginName, dialog; - var dialogLang = lang.dialog.emoji; - - var dialogContent = [ - "
", - "
", - "
", - ].join("\n"); - - cm.focus(); - - if (editor.find("." + dialogName).length > 0) - { - dialog = editor.find("." + dialogName); - - selecteds = []; - dialog.find("a").removeClass("selected"); - - this.dialogShowMask(dialog); - this.dialogLockScreen(); - dialog.show(); - } - else - { - dialog = this.createDialog({ - name : dialogName, - title : dialogLang.title, - width : 800, - height : 475, - mask : settings.dialogShowMask, - drag : settings.dialogDraggable, - content : dialogContent, - lockScreen : settings.dialogLockScreen, - maskStyle : { - opacity : settings.dialogMaskOpacity, - backgroundColor : settings.dialogMaskBgColor - }, - buttons : { - enter : [lang.buttons.enter, function() { - cm.replaceSelection(selecteds.join(" ")); - this.hide().lockScreen(false).hideMask(); - - return false; - }], - cancel : [lang.buttons.cancel, function() { - this.hide().lockScreen(false).hideMask(); - - return false; - }] - } - }); - } - - var category = ["Github emoji", "Twemoji", "Font awesome", "Editor.md logo"]; - var tab = dialog.find("." + classPrefix + "tab"); - - if (tab.html() === "") - { - var head = ""; - - tab.append(head); - - var container = "
"; - - for (var x = 0; x < 4; x++) - { - var display = (x === 0) ? "" : "display:none;"; - container += "
"; - } - - container += "
"; - - tab.append(container); - } - - var tabBoxs = tab.find("." + classPrefix + "tab-box"); - var emojiCategories = ["github-emoji", "twemoji", "font-awesome", logoPrefix]; - - var drawTable = function() { - var cname = emojiCategories[emojiTabIndex]; - var $data = emojiData[cname]; - var $tab = tabBoxs.eq(emojiTabIndex); - - if ($tab.html() !== "") { - //console.log("break =>", cname); - return ; - } - - var pagination = function(data, type) { - var rowNumber = (type === "editormd-logo") ? "5" : 20; - var pageTotal = Math.ceil(data.length / rowNumber); - var table = "
"; - - for (var i = 0; i < pageTotal; i++) - { - var row = "
"; - - for (var x = 0; x < rowNumber; x++) - { - var emoji = $.trim(data[(i * rowNumber) + x]); - - if (typeof emoji !== "undefined" && emoji !== "") - { - var img = "", icon = ""; - - if (type === "github-emoji") - { - var src = (emoji === "+1") ? "plus1" : emoji; - src = (src === "black_large_square") ? "black_square" : src; - src = (src === "moon") ? "waxing_gibbous_moon" : src; - - src = exports.emoji.path + src + exports.emoji.ext; - img = "\":""; - row += "" + img + ""; - } - else if (type === "twemoji") - { - var twemojiSrc = exports.twemoji.path + emoji + exports.twemoji.ext; - img = "\"twemoji-""; - row += "" + img + ""; - } - else if (type === "font-awesome") - { - icon = ""; - row += "" + icon + ""; - } - else if (type === "editormd-logo") - { - icon = ""; - row += "" + icon + ""; - } - } - else - { - row += ""; - } - } - - row += "
"; - - table += row; - } - - table += "
"; - - return table; - }; - - if (emojiTabIndex === 0) - { - for (var i = 0, len = $data.length; i < len; i++) - { - var h4Style = (i === 0) ? " style=\"margin: 0 0 10px;\"" : " style=\"margin: 10px 0;\""; - $tab.append("" + $data[i].category + ""); - $tab.append(pagination($data[i].list, cname)); - } - } - else - { - $tab.append(pagination($data, cname)); - } - - $tab.find("." + classPrefix + "emoji-btn").bind(exports.mouseOrTouch("click", "touchend"), function() { - $(this).toggleClass("selected"); - - if ($(this).hasClass("selected")) - { - selecteds.push($(this).attr("value")); - } - }); - }; - - if (emojiData.length < 1) - { - if (typeof dialog.loading === "function") { - dialog.loading(true); - } - - $.getJSON(path + "emoji.json?temp=" + Math.random(), function(json) { - - if (typeof dialog.loading === "function") { - dialog.loading(false); - } - - emojiData = json; - emojiData[logoPrefix] = logos; - drawTable(); - }); - } - else - { - drawTable(); - } - - tab.find("li").bind(exports.mouseOrTouch("click", "touchend"), function() { - var $this = $(this); - emojiTabIndex = $this.index(); - - $this.addClass("active").siblings().removeClass("active"); - tabBoxs.eq(emojiTabIndex).show().siblings().hide(); - drawTable(); - }); - }; - - }; - - // 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); - } - -})(); +/*! + * Emoji dialog plugin for Editor.md + * + * @file emoji-dialog.js + * @author pandao + * @version 1.2.0 + * @updateTime 2015-03-08 + * {@link https://github.com/pandao/editor.md} + * @license MIT + */ + +(function() { + + var factory = function (exports) { + + var $ = jQuery; + var pluginName = "emoji-dialog"; + var emojiTabIndex = 0; + var emojiData = []; + var selecteds = []; + + var logoPrefix = "editormd-logo"; + var logos = [ + logoPrefix, + logoPrefix + "-1x", + logoPrefix + "-2x", + logoPrefix + "-3x", + logoPrefix + "-4x", + logoPrefix + "-5x", + logoPrefix + "-6x", + logoPrefix + "-7x", + logoPrefix + "-8x" + ]; + + var langs = { + "zh-cn" : { + toolbar : { + emoji : "Emoji 表情" + }, + dialog : { + emoji : { + title : "Emoji 表情" + } + } + }, + "zh-tw" : { + toolbar : { + emoji : "Emoji 表情" + }, + dialog : { + emoji : { + title : "Emoji 表情" + } + } + }, + "en" : { + toolbar : { + emoji : "Emoji" + }, + dialog : { + emoji : { + title : "Emoji" + } + } + } + }; + + exports.fn.emojiDialog = function() { + var _this = this; + var cm = this.cm; + var settings = _this.settings; + + if (!settings.emoji) + { + alert("settings.emoji == false"); + return ; + } + + var path = settings.pluginPath + pluginName + "/"; + var editor = this.editor; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + var classPrefix = this.classPrefix; + + $.extend(true, this.lang, langs[this.lang.name]); + this.setToolbar(); + + var lang = this.lang; + var dialogName = classPrefix + pluginName, dialog; + var dialogLang = lang.dialog.emoji; + + var dialogContent = [ + "
", + "
", + "
", + ].join("\n"); + + cm.focus(); + + if (editor.find("." + dialogName).length > 0) + { + dialog = editor.find("." + dialogName); + + selecteds = []; + dialog.find("a").removeClass("selected"); + + this.dialogShowMask(dialog); + this.dialogLockScreen(); + dialog.show(); + } + else + { + dialog = this.createDialog({ + name : dialogName, + title : dialogLang.title, + width : 800, + height : 475, + mask : settings.dialogShowMask, + drag : settings.dialogDraggable, + content : dialogContent, + lockScreen : settings.dialogLockScreen, + maskStyle : { + opacity : settings.dialogMaskOpacity, + backgroundColor : settings.dialogMaskBgColor + }, + buttons : { + enter : [lang.buttons.enter, function() { + cm.replaceSelection(selecteds.join(" ")); + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + + return false; + }], + cancel : [lang.buttons.cancel, function() { + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + + return false; + }] + } + }); + } + + var category = ["Github emoji", "Twemoji", "Font awesome", "Editor.md logo"]; + var tab = dialog.find("." + classPrefix + "tab"); + + if (tab.html() === "") + { + var head = ""; + + tab.append(head); + + var container = "
"; + + for (var x = 0; x < 4; x++) + { + var display = (x === 0) ? "" : "display:none;"; + container += "
"; + } + + container += "
"; + + tab.append(container); + } + + var tabBoxs = tab.find("." + classPrefix + "tab-box"); + var emojiCategories = ["github-emoji", "twemoji", "font-awesome", logoPrefix]; + + var drawTable = function() { + var cname = emojiCategories[emojiTabIndex]; + var $data = emojiData[cname]; + var $tab = tabBoxs.eq(emojiTabIndex); + + if ($tab.html() !== "") { + //console.log("break =>", cname); + return ; + } + + var pagination = function(data, type) { + var rowNumber = (type === "editormd-logo") ? "5" : 20; + var pageTotal = Math.ceil(data.length / rowNumber); + var table = "
"; + + for (var i = 0; i < pageTotal; i++) + { + var row = "
"; + + for (var x = 0; x < rowNumber; x++) + { + var emoji = $.trim(data[(i * rowNumber) + x]); + + if (typeof emoji !== "undefined" && emoji !== "") + { + var img = "", icon = ""; + + if (type === "github-emoji") + { + var src = (emoji === "+1") ? "plus1" : emoji; + src = (src === "black_large_square") ? "black_square" : src; + src = (src === "moon") ? "waxing_gibbous_moon" : src; + + src = exports.emoji.path + src + exports.emoji.ext; + img = "\":""; + row += "" + img + ""; + } + else if (type === "twemoji") + { + var twemojiSrc = exports.twemoji.path + emoji + exports.twemoji.ext; + img = "\"twemoji-""; + row += "" + img + ""; + } + else if (type === "font-awesome") + { + icon = ""; + row += "" + icon + ""; + } + else if (type === "editormd-logo") + { + icon = ""; + row += "" + icon + ""; + } + } + else + { + row += ""; + } + } + + row += "
"; + + table += row; + } + + table += "
"; + + return table; + }; + + if (emojiTabIndex === 0) + { + for (var i = 0, len = $data.length; i < len; i++) + { + var h4Style = (i === 0) ? " style=\"margin: 0 0 10px;\"" : " style=\"margin: 10px 0;\""; + $tab.append("" + $data[i].category + ""); + $tab.append(pagination($data[i].list, cname)); + } + } + else + { + $tab.append(pagination($data, cname)); + } + + $tab.find("." + classPrefix + "emoji-btn").bind(exports.mouseOrTouch("click", "touchend"), function() { + $(this).toggleClass("selected"); + + if ($(this).hasClass("selected")) + { + selecteds.push($(this).attr("value")); + } + }); + }; + + if (emojiData.length < 1) + { + if (typeof dialog.loading === "function") { + dialog.loading(true); + } + + $.getJSON(path + "emoji.json?temp=" + Math.random(), function(json) { + + if (typeof dialog.loading === "function") { + dialog.loading(false); + } + + emojiData = json; + emojiData[logoPrefix] = logos; + drawTable(); + }); + } + else + { + drawTable(); + } + + tab.find("li").bind(exports.mouseOrTouch("click", "touchend"), function() { + var $this = $(this); + emojiTabIndex = $this.index(); + + $this.addClass("active").siblings().removeClass("active"); + tabBoxs.eq(emojiTabIndex).show().siblings().hide(); + drawTable(); + }); + }; + + }; + + // 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); + } + +})(); diff --git a/public/editormd/plugins/goto-line-dialog/goto-line-dialog.js b/public/editormd/plugins/goto-line-dialog/goto-line-dialog.js index 4992026ae..f569ad7b3 100644 --- a/public/editormd/plugins/goto-line-dialog/goto-line-dialog.js +++ b/public/editormd/plugins/goto-line-dialog/goto-line-dialog.js @@ -1,157 +1,159 @@ -/*! - * Goto line dialog plugin for Editor.md - * - * @file goto-line-dialog.js - * @author pandao - * @version 1.2.1 - * @updateTime 2015-06-09 - * {@link https://github.com/pandao/editor.md} - * @license MIT - */ - -(function() { - - var factory = function (exports) { - - var $ = jQuery; - var pluginName = "goto-line-dialog"; - - var langs = { - "zh-cn" : { - toolbar : { - "goto-line" : "跳转到行" - }, - dialog : { - "goto-line" : { - title : "跳转到行", - label : "请输入行号", - error : "错误:" - } - } - }, - "zh-tw" : { - toolbar : { - "goto-line" : "跳轉到行" - }, - dialog : { - "goto-line" : { - title : "跳轉到行", - label : "請輸入行號", - error : "錯誤:" - } - } - }, - "en" : { - toolbar : { - "goto-line" : "Goto line" - }, - dialog : { - "goto-line" : { - title : "Goto line", - label : "Enter a line number, range ", - error : "Error: " - } - } - } - }; - - exports.fn.gotoLineDialog = function() { - var _this = this; - var cm = this.cm; - var editor = this.editor; - var settings = this.settings; - var path = settings.pluginPath + pluginName +"/"; - var classPrefix = this.classPrefix; - var dialogName = classPrefix + pluginName, dialog; - - $.extend(true, this.lang, langs[this.lang.name]); - this.setToolbar(); - - var lang = this.lang; - var dialogLang = lang.dialog["goto-line"]; - var lineCount = cm.lineCount(); - - dialogLang.error += dialogLang.label + " 1-" + lineCount; - - if (editor.find("." + dialogName).length < 1) - { - var dialogContent = [ - "
", - "

" + dialogLang.label + " 1-" + lineCount +"   

", - "
" - ].join("\n"); - - dialog = this.createDialog({ - name : dialogName, - title : dialogLang.title, - width : 400, - height : 180, - mask : settings.dialogShowMask, - drag : settings.dialogDraggable, - content : dialogContent, - lockScreen : settings.dialogLockScreen, - maskStyle : { - opacity : settings.dialogMaskOpacity, - backgroundColor : settings.dialogMaskBgColor - }, - buttons : { - enter : [lang.buttons.enter, function() { - var line = parseInt(this.find("[data-line-number]").val()); - - if (line < 1 || line > lineCount) { - alert(dialogLang.error); - - return false; - } - - _this.gotoLine(line); - - this.hide().lockScreen(false).hideMask(); - - return false; - }], - - cancel : [lang.buttons.cancel, function() { - this.hide().lockScreen(false).hideMask(); - - return false; - }] - } - }); - } - - dialog = editor.find("." + dialogName); - - this.dialogShowMask(dialog); - this.dialogLockScreen(); - dialog.show(); - }; - - }; - - // 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); - } - -})(); +/*! + * Goto line dialog plugin for Editor.md + * + * @file goto-line-dialog.js + * @author pandao + * @version 1.2.1 + * @updateTime 2015-06-09 + * {@link https://github.com/pandao/editor.md} + * @license MIT + */ + +(function() { + + var factory = function (exports) { + + var $ = jQuery; + var pluginName = "goto-line-dialog"; + + var langs = { + "zh-cn" : { + toolbar : { + "goto-line" : "跳转到行" + }, + dialog : { + "goto-line" : { + title : "跳转到行", + label : "请输入行号", + error : "错误:" + } + } + }, + "zh-tw" : { + toolbar : { + "goto-line" : "跳轉到行" + }, + dialog : { + "goto-line" : { + title : "跳轉到行", + label : "請輸入行號", + error : "錯誤:" + } + } + }, + "en" : { + toolbar : { + "goto-line" : "Goto line" + }, + dialog : { + "goto-line" : { + title : "Goto line", + label : "Enter a line number, range ", + error : "Error: " + } + } + } + }; + + exports.fn.gotoLineDialog = function() { + var _this = this; + var cm = this.cm; + var editor = this.editor; + var settings = this.settings; + var path = settings.pluginPath + pluginName +"/"; + var classPrefix = this.classPrefix; + var dialogName = classPrefix + pluginName, dialog; + + $.extend(true, this.lang, langs[this.lang.name]); + this.setToolbar(); + + var lang = this.lang; + var dialogLang = lang.dialog["goto-line"]; + var lineCount = cm.lineCount(); + + dialogLang.error += dialogLang.label + " 1-" + lineCount; + + if (editor.find("." + dialogName).length < 1) + { + var dialogContent = [ + "
", + "

" + dialogLang.label + " 1-" + lineCount +"   

", + "
" + ].join("\n"); + + dialog = this.createDialog({ + name : dialogName, + title : dialogLang.title, + width : 400, + height : 180, + mask : settings.dialogShowMask, + drag : settings.dialogDraggable, + content : dialogContent, + lockScreen : settings.dialogLockScreen, + maskStyle : { + opacity : settings.dialogMaskOpacity, + backgroundColor : settings.dialogMaskBgColor + }, + buttons : { + enter : [lang.buttons.enter, function() { + var line = parseInt(this.find("[data-line-number]").val()); + + if (line < 1 || line > lineCount) { + alert(dialogLang.error); + + return false; + } + + _this.gotoLine(line); + + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + + return false; + }], + + cancel : [lang.buttons.cancel, function() { + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + + return false; + }] + } + }); + } + + dialog = editor.find("." + dialogName); + + this.dialogShowMask(dialog); + this.dialogLockScreen(); + dialog.show(); + }; + + }; + + // 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); + } + +})(); diff --git a/public/editormd/plugins/help-dialog/help-dialog.js b/public/editormd/plugins/help-dialog/help-dialog.js index 4e2b279bd..2cb8cb9a1 100644 --- a/public/editormd/plugins/help-dialog/help-dialog.js +++ b/public/editormd/plugins/help-dialog/help-dialog.js @@ -1,102 +1,104 @@ -/*! - * Help dialog plugin for Editor.md - * - * @file help-dialog.js - * @author pandao - * @version 1.2.0 - * @updateTime 2015-03-08 - * {@link https://github.com/pandao/editor.md} - * @license MIT - */ - -(function() { - - var factory = function (exports) { - - var $ = jQuery; - var pluginName = "help-dialog"; - - exports.fn.helpDialog = function() { - var _this = this; - var lang = this.lang; - var editor = this.editor; - var settings = this.settings; - var path = settings.pluginPath + pluginName + "/"; - var classPrefix = this.classPrefix; - var dialogName = classPrefix + pluginName, dialog; - var dialogLang = lang.dialog.help; - - if (editor.find("." + dialogName).length < 1) - { - var dialogContent = "
"; - - dialog = this.createDialog({ - name : dialogName, - title : dialogLang.title, - width : 840, - height : 540, - mask : settings.dialogShowMask, - drag : settings.dialogDraggable, - content : dialogContent, - lockScreen : settings.dialogLockScreen, - maskStyle : { - opacity : settings.dialogMaskOpacity, - backgroundColor : settings.dialogMaskBgColor - }, - buttons : { - close : [lang.buttons.close, function() { - this.hide().lockScreen(false).hideMask(); - - return false; - }] - } - }); - } - - dialog = editor.find("." + dialogName); - - this.dialogShowMask(dialog); - this.dialogLockScreen(); - dialog.show(); - - var helpContent = dialog.find(".markdown-body"); - - if (helpContent.html() === "") - { - $.get(path + "help.md", function(text) { - var md = exports.$marked(text); - helpContent.html(md); - - helpContent.find("a").attr("target", "_blank"); - }); - } - }; - - }; - - // 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); - } - -})(); +/*! + * Help dialog plugin for Editor.md + * + * @file help-dialog.js + * @author pandao + * @version 1.2.0 + * @updateTime 2015-03-08 + * {@link https://github.com/pandao/editor.md} + * @license MIT + */ + +(function() { + + var factory = function (exports) { + + var $ = jQuery; + var pluginName = "help-dialog"; + + exports.fn.helpDialog = function() { + var _this = this; + var lang = this.lang; + var cm = this.cm; + var editor = this.editor; + var settings = this.settings; + var path = settings.pluginPath + pluginName + "/"; + var classPrefix = this.classPrefix; + var dialogName = classPrefix + pluginName, dialog; + var dialogLang = lang.dialog.help; + + if (editor.find("." + dialogName).length < 1) + { + var dialogContent = "
"; + + dialog = this.createDialog({ + name : dialogName, + title : dialogLang.title, + width : 840, + height : 540, + mask : settings.dialogShowMask, + drag : settings.dialogDraggable, + content : dialogContent, + lockScreen : settings.dialogLockScreen, + maskStyle : { + opacity : settings.dialogMaskOpacity, + backgroundColor : settings.dialogMaskBgColor + }, + buttons : { + close : [lang.buttons.close, function() { + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + + return false; + }] + } + }); + } + + dialog = editor.find("." + dialogName); + + this.dialogShowMask(dialog); + this.dialogLockScreen(); + dialog.show(); + + var helpContent = dialog.find(".markdown-body"); + + if (helpContent.html() === "") + { + $.get(path + "help.md", function(text) { + var md = exports.$marked(text); + helpContent.html(md); + + helpContent.find("a").attr("target", "_blank"); + }); + } + }; + + }; + + // 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); + } + +})(); diff --git a/public/editormd/plugins/html-entities-dialog/html-entities-dialog.js b/public/editormd/plugins/html-entities-dialog/html-entities-dialog.js index cc9835b56..e3dc91e20 100644 --- a/public/editormd/plugins/html-entities-dialog/html-entities-dialog.js +++ b/public/editormd/plugins/html-entities-dialog/html-entities-dialog.js @@ -1,173 +1,173 @@ -/*! - * HTML entities dialog plugin for Editor.md - * - * @file html-entities-dialog.js - * @author pandao - * @version 1.2.0 - * @updateTime 2015-03-08 - * {@link https://github.com/pandao/editor.md} - * @license MIT - */ - -(function() { - - var factory = function (exports) { - - var $ = jQuery; - var pluginName = "html-entities-dialog"; - var selecteds = []; - var entitiesData = []; - - exports.fn.htmlEntitiesDialog = function() { - var _this = this; - var cm = this.cm; - var lang = _this.lang; - var settings = _this.settings; - var path = settings.pluginPath + pluginName + "/"; - var editor = this.editor; - var cursor = cm.getCursor(); - var selection = cm.getSelection(); - var classPrefix = _this.classPrefix; - - var dialogName = classPrefix + "dialog-" + pluginName, dialog; - var dialogLang = lang.dialog.htmlEntities; - - var dialogContent = [ - '
', - '
', - '
', - '
', - ].join("\r\n"); - - cm.focus(); - - if (editor.find("." + dialogName).length > 0) - { - dialog = editor.find("." + dialogName); - - selecteds = []; - dialog.find("a").removeClass("selected"); - - this.dialogShowMask(dialog); - this.dialogLockScreen(); - dialog.show(); - } - else - { - dialog = this.createDialog({ - name : dialogName, - title : dialogLang.title, - width : 800, - height : 475, - mask : settings.dialogShowMask, - drag : settings.dialogDraggable, - content : dialogContent, - lockScreen : settings.dialogLockScreen, - maskStyle : { - opacity : settings.dialogMaskOpacity, - backgroundColor : settings.dialogMaskBgColor - }, - buttons : { - enter : [lang.buttons.enter, function() { - cm.replaceSelection(selecteds.join(" ")); - this.hide().lockScreen(false).hideMask(); - - return false; - }], - cancel : [lang.buttons.cancel, function() { - this.hide().lockScreen(false).hideMask(); - - return false; - }] - } - }); - } - - var table = dialog.find("." + classPrefix + "grid-table"); - - var drawTable = function() { - - if (entitiesData.length < 1) return ; - - var rowNumber = 20; - var pageTotal = Math.ceil(entitiesData.length / rowNumber); - - table.html(""); - - for (var i = 0; i < pageTotal; i++) - { - var row = "
"; - - for (var x = 0; x < rowNumber; x++) - { - var entity = entitiesData[(i * rowNumber) + x]; - - if (typeof entity !== "undefined") - { - var name = entity.name.replace("&", "&"); - - row += "" + name + ""; - } - } - - row += "
"; - - table.append(row); - } - - dialog.find("." + classPrefix + "html-entity-btn").bind(exports.mouseOrTouch("click", "touchend"), function() { - $(this).toggleClass("selected"); - - if ($(this).hasClass("selected")) - { - selecteds.push($(this).attr("value")); - } - }); - }; - - if (entitiesData.length < 1) - { - if (typeof (dialog.loading) == "function") dialog.loading(true); - - $.getJSON(path + pluginName.replace("-dialog", "") + ".json", function(json) { - - if (typeof (dialog.loading) == "function") dialog.loading(false); - - entitiesData = json; - drawTable(); - }); - } - else - { - drawTable(); - } - }; - - }; - - // 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); - } - -})(); +/*! + * HTML entities dialog plugin for Editor.md + * + * @file html-entities-dialog.js + * @author pandao + * @version 1.2.0 + * @updateTime 2015-03-08 + * {@link https://github.com/pandao/editor.md} + * @license MIT + */ + +(function() { + + var factory = function (exports) { + + var $ = jQuery; + var pluginName = "html-entities-dialog"; + var selecteds = []; + var entitiesData = []; + + exports.fn.htmlEntitiesDialog = function() { + var _this = this; + var cm = this.cm; + var lang = _this.lang; + var settings = _this.settings; + var path = settings.pluginPath + pluginName + "/"; + var editor = this.editor; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + var classPrefix = _this.classPrefix; + + var dialogName = classPrefix + "dialog-" + pluginName, dialog; + var dialogLang = lang.dialog.htmlEntities; + + var dialogContent = [ + '
', + '
', + '
', + '
', + ].join("\r\n"); + + cm.focus(); + + if (editor.find("." + dialogName).length > 0) + { + dialog = editor.find("." + dialogName); + + selecteds = []; + dialog.find("a").removeClass("selected"); + + this.dialogShowMask(dialog); + this.dialogLockScreen(); + dialog.show(); + } + else + { + dialog = this.createDialog({ + name : dialogName, + title : dialogLang.title, + width : 800, + height : 475, + mask : settings.dialogShowMask, + drag : settings.dialogDraggable, + content : dialogContent, + lockScreen : settings.dialogLockScreen, + maskStyle : { + opacity : settings.dialogMaskOpacity, + backgroundColor : settings.dialogMaskBgColor + }, + buttons : { + enter : [lang.buttons.enter, function() { + cm.replaceSelection(selecteds.join(" ")); + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + return false; + }], + cancel : [lang.buttons.cancel, function() { + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + return false; + }] + } + }); + } + + var table = dialog.find("." + classPrefix + "grid-table"); + + var drawTable = function() { + + if (entitiesData.length < 1) return ; + + var rowNumber = 20; + var pageTotal = Math.ceil(entitiesData.length / rowNumber); + + table.html(""); + + for (var i = 0; i < pageTotal; i++) + { + var row = "
"; + + for (var x = 0; x < rowNumber; x++) + { + var entity = entitiesData[(i * rowNumber) + x]; + + if (typeof entity !== "undefined") + { + var name = entity.name.replace("&", "&"); + + row += "" + name + ""; + } + } + + row += "
"; + + table.append(row); + } + + dialog.find("." + classPrefix + "html-entity-btn").bind(exports.mouseOrTouch("click", "touchend"), function() { + $(this).toggleClass("selected"); + + if ($(this).hasClass("selected")) + { + selecteds.push($(this).attr("value")); + } + }); + }; + + if (entitiesData.length < 1) + { + if (typeof (dialog.loading) == "function") dialog.loading(true); + + $.getJSON(path + pluginName.replace("-dialog", "") + ".json", function(json) { + + if (typeof (dialog.loading) == "function") dialog.loading(false); + + entitiesData = json; + drawTable(); + }); + } + else + { + drawTable(); + } + }; + + }; + + // 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); + } + +})(); diff --git a/public/editormd/plugins/link-dialog/link-dialog.js b/public/editormd/plugins/link-dialog/link-dialog.js index c0c0c581a..e121a8462 100644 --- a/public/editormd/plugins/link-dialog/link-dialog.js +++ b/public/editormd/plugins/link-dialog/link-dialog.js @@ -1,133 +1,134 @@ -/*! - * Link dialog plugin for Editor.md - * - * @file link-dialog.js - * @author pandao - * @version 1.2.1 - * @updateTime 2015-06-09 - * {@link https://github.com/pandao/editor.md} - * @license MIT - */ - -(function() { - - var factory = function (exports) { - - var pluginName = "link-dialog"; - - exports.fn.linkDialog = function() { - - var _this = this; - var cm = this.cm; - var editor = this.editor; - var settings = this.settings; - var selection = cm.getSelection(); - var lang = this.lang; - var linkLang = lang.dialog.link; - var classPrefix = this.classPrefix; - var dialogName = classPrefix + pluginName, dialog; - - cm.focus(); - - if (editor.find("." + dialogName).length > 0) - { - dialog = editor.find("." + dialogName); - dialog.find("[data-url]").val("http://"); - dialog.find("[data-title]").val(selection); - - this.dialogShowMask(dialog); - this.dialogLockScreen(); - dialog.show(); - } - else - { - var dialogHTML = "
" + - "" + - "" + - "
" + - "" + - "" + - "
" + - "
"; - - dialog = this.createDialog({ - title : linkLang.title, - width : 380, - height : 211, - content : dialogHTML, - mask : settings.dialogShowMask, - drag : settings.dialogDraggable, - lockScreen : settings.dialogLockScreen, - maskStyle : { - opacity : settings.dialogMaskOpacity, - backgroundColor : settings.dialogMaskBgColor - }, - buttons : { - enter : [lang.buttons.enter, function() { - var url = this.find("[data-url]").val(); - var title = this.find("[data-title]").val(); - - if (url === "http://" || url === "") - { - alert(linkLang.urlEmpty); - return false; - } - - /*if (title === "") - { - alert(linkLang.titleEmpty); - return false; - }*/ - - var str = "[" + title + "](" + url + " \"" + title + "\")"; - - if (title == "") - { - str = "[" + url + "](" + url + ")"; - } - - cm.replaceSelection(str); - - this.hide().lockScreen(false).hideMask(); - - return false; - }], - - cancel : [lang.buttons.cancel, function() { - this.hide().lockScreen(false).hideMask(); - - return false; - }] - } - }); - } - }; - - }; - - // 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); - } - -})(); +/*! + * Link dialog plugin for Editor.md + * + * @file link-dialog.js + * @author pandao + * @version 1.2.1 + * @updateTime 2015-06-09 + * {@link https://github.com/pandao/editor.md} + * @license MIT + */ + +(function() { + + var factory = function (exports) { + + var pluginName = "link-dialog"; + + exports.fn.linkDialog = function() { + + var _this = this; + var cm = this.cm; + var editor = this.editor; + var settings = this.settings; + var selection = cm.getSelection(); + var lang = this.lang; + var linkLang = lang.dialog.link; + var classPrefix = this.classPrefix; + var dialogName = classPrefix + pluginName, dialog; + + cm.focus(); + + if (editor.find("." + dialogName).length > 0) + { + dialog = editor.find("." + dialogName); + dialog.find("[data-url]").val("http://"); + dialog.find("[data-title]").val(selection); + + this.dialogShowMask(dialog); + this.dialogLockScreen(); + dialog.show(); + } + else + { + var dialogHTML = "
" + + "" + + "" + + "
" + + "" + + "" + + "
" + + "
"; + + dialog = this.createDialog({ + title : linkLang.title, + width : 380, + height : 211, + content : dialogHTML, + mask : settings.dialogShowMask, + drag : settings.dialogDraggable, + lockScreen : settings.dialogLockScreen, + maskStyle : { + opacity : settings.dialogMaskOpacity, + backgroundColor : settings.dialogMaskBgColor + }, + buttons : { + enter : [lang.buttons.enter, function() { + var url = this.find("[data-url]").val(); + var title = this.find("[data-title]").val(); + + if (url === "http://" || url === "") + { + alert(linkLang.urlEmpty); + return false; + } + + /*if (title === "") + { + alert(linkLang.titleEmpty); + return false; + }*/ + + var str = "[" + title + "](" + url + " \"" + title + "\")"; + + if (title == "") + { + str = "[" + url + "](" + url + ")"; + } + + cm.replaceSelection(str); + + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + + return false; + }], + + cancel : [lang.buttons.cancel, function() { + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + return false; + }] + } + }); + } + }; + + }; + + // 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); + } + +})(); diff --git a/public/editormd/plugins/preformatted-text-dialog/preformatted-text-dialog.js b/public/editormd/plugins/preformatted-text-dialog/preformatted-text-dialog.js index e19bbd54a..733e644b8 100644 --- a/public/editormd/plugins/preformatted-text-dialog/preformatted-text-dialog.js +++ b/public/editormd/plugins/preformatted-text-dialog/preformatted-text-dialog.js @@ -1,172 +1,174 @@ -/*! - * Preformatted text dialog plugin for Editor.md - * - * @file preformatted-text-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 = "preformatted-text-dialog"; - - exports.fn.preformattedTextDialog = 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 dialogLang = lang.dialog.preformattedText; - var dialogName = classPrefix + pluginName, dialog; - - cm.focus(); - - if (editor.find("." + dialogName).length > 0) - { - dialog = editor.find("." + dialogName); - dialog.find("textarea").val(selection); - - this.dialogShowMask(dialog); - this.dialogLockScreen(); - dialog.show(); - } - else - { - var dialogContent = ""; - - dialog = this.createDialog({ - name : dialogName, - title : dialogLang.title, - width : 780, - height : 540, - mask : settings.dialogShowMask, - drag : settings.dialogDraggable, - content : dialogContent, - lockScreen : settings.dialogLockScreen, - maskStyle : { - opacity : settings.dialogMaskOpacity, - backgroundColor : settings.dialogMaskBgColor - }, - buttons : { - enter : [lang.buttons.enter, function() { - var codeTexts = this.find("textarea").val(); - - if (codeTexts === "") - { - alert(dialogLang.emptyAlert); - return false; - } - - codeTexts = codeTexts.split("\n"); - - for (var i in codeTexts) - { - codeTexts[i] = " " + codeTexts[i]; - } - - codeTexts = codeTexts.join("\n"); - - if (cursor.ch !== 0) { - codeTexts = "\r\n\r\n" + codeTexts; - } - - cm.replaceSelection(codeTexts); - - this.hide().lockScreen(false).hideMask(); - - return false; - }], - cancel : [lang.buttons.cancel, function() { - this.hide().lockScreen(false).hideMask(); - - return false; - }] - } - }); - } - - var cmConfig = { - 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 : "0 0 5px", - border : "1px solid #ddd", - fontSize : settings.fontSize, - width : "100%", - height : "410px" - }); - - cmEditor.on("change", function(cm) { - textarea.val(cm.getValue()); - }); - } - else - { - cmEditor.setValue(cm.getSelection()); - } - }; - - }; - - // 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); - } - -})(); +/*! + * Preformatted text dialog plugin for Editor.md + * + * @file preformatted-text-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 = "preformatted-text-dialog"; + + exports.fn.preformattedTextDialog = 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 dialogLang = lang.dialog.preformattedText; + var dialogName = classPrefix + pluginName, dialog; + + cm.focus(); + + if (editor.find("." + dialogName).length > 0) + { + dialog = editor.find("." + dialogName); + dialog.find("textarea").val(selection); + + this.dialogShowMask(dialog); + this.dialogLockScreen(); + dialog.show(); + } + else + { + var dialogContent = ""; + + dialog = this.createDialog({ + name : dialogName, + title : dialogLang.title, + width : 780, + height : 540, + mask : settings.dialogShowMask, + drag : settings.dialogDraggable, + content : dialogContent, + lockScreen : settings.dialogLockScreen, + maskStyle : { + opacity : settings.dialogMaskOpacity, + backgroundColor : settings.dialogMaskBgColor + }, + buttons : { + enter : [lang.buttons.enter, function() { + var codeTexts = this.find("textarea").val(); + + if (codeTexts === "") + { + alert(dialogLang.emptyAlert); + return false; + } + + codeTexts = codeTexts.split("\n"); + + for (var i in codeTexts) + { + codeTexts[i] = " " + codeTexts[i]; + } + + codeTexts = codeTexts.join("\n"); + + if (cursor.ch !== 0) { + codeTexts = "\r\n\r\n" + codeTexts; + } + + cm.replaceSelection(codeTexts); + + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + + return false; + }], + cancel : [lang.buttons.cancel, function() { + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + + return false; + }] + } + }); + } + + var cmConfig = { + 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 : "0 0 5px", + border : "1px solid #ddd", + fontSize : settings.fontSize, + width : "100%", + height : "410px" + }); + + cmEditor.on("change", function(cm) { + textarea.val(cm.getValue()); + }); + } + else + { + cmEditor.setValue(cm.getSelection()); + } + }; + + }; + + // 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); + } + +})(); diff --git a/public/editormd/plugins/reference-link-dialog/reference-link-dialog.js b/public/editormd/plugins/reference-link-dialog/reference-link-dialog.js index fea88f294..e6ca126e0 100644 --- a/public/editormd/plugins/reference-link-dialog/reference-link-dialog.js +++ b/public/editormd/plugins/reference-link-dialog/reference-link-dialog.js @@ -1,153 +1,155 @@ -/*! - * Reference link dialog plugin for Editor.md - * - * @file reference-link-dialog.js - * @author pandao - * @version 1.2.1 - * @updateTime 2015-06-09 - * {@link https://github.com/pandao/editor.md} - * @license MIT - */ - -(function() { - - var factory = function (exports) { - - var pluginName = "reference-link-dialog"; - var ReLinkId = 1; - - exports.fn.referenceLinkDialog = 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 dialogLang = lang.dialog.referenceLink; - var classPrefix = this.classPrefix; - var dialogName = classPrefix + pluginName, dialog; - - cm.focus(); - - if (editor.find("." + dialogName).length < 1) - { - var dialogHTML = "
" + - "" + - "" + - "
" + - "" + - "" + - "
" + - "" + - "" + - "
" + - "" + - "" + - "
" + - "
"; - - dialog = this.createDialog({ - name : dialogName, - title : dialogLang.title, - width : 380, - height : 296, - content : dialogHTML, - mask : settings.dialogShowMask, - drag : settings.dialogDraggable, - lockScreen : settings.dialogLockScreen, - maskStyle : { - opacity : settings.dialogMaskOpacity, - backgroundColor : settings.dialogMaskBgColor - }, - buttons : { - enter : [lang.buttons.enter, function() { - var name = this.find("[data-name]").val(); - var url = this.find("[data-url]").val(); - var rid = this.find("[data-url-id]").val(); - var title = this.find("[data-title]").val(); - - if (name === "") - { - alert(dialogLang.nameEmpty); - return false; - } - - if (rid === "") - { - alert(dialogLang.idEmpty); - return false; - } - - if (url === "http://" || url === "") - { - alert(dialogLang.urlEmpty); - return false; - } - - //cm.replaceSelection("[" + title + "][" + name + "]\n[" + name + "]: " + url + ""); - cm.replaceSelection("[" + name + "][" + rid + "]"); - - if (selection === "") { - cm.setCursor(cursor.line, cursor.ch + 1); - } - - title = (title === "") ? "" : " \"" + title + "\""; - - cm.setValue(cm.getValue() + "\n[" + rid + "]: " + url + title + ""); - - this.hide().lockScreen(false).hideMask(); - - return false; - }], - cancel : [lang.buttons.cancel, function() { - this.hide().lockScreen(false).hideMask(); - - return false; - }] - } - }); - } - - dialog = editor.find("." + dialogName); - dialog.find("[data-name]").val("[" + ReLinkId + "]"); - dialog.find("[data-url-id]").val(""); - dialog.find("[data-url]").val("http://"); - dialog.find("[data-title]").val(selection); - - this.dialogShowMask(dialog); - this.dialogLockScreen(); - dialog.show(); - - ReLinkId++; - }; - - }; - - // 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); - } - -})(); +/*! + * Reference link dialog plugin for Editor.md + * + * @file reference-link-dialog.js + * @author pandao + * @version 1.2.1 + * @updateTime 2015-06-09 + * {@link https://github.com/pandao/editor.md} + * @license MIT + */ + +(function() { + + var factory = function (exports) { + + var pluginName = "reference-link-dialog"; + var ReLinkId = 1; + + exports.fn.referenceLinkDialog = 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 dialogLang = lang.dialog.referenceLink; + var classPrefix = this.classPrefix; + var dialogName = classPrefix + pluginName, dialog; + + cm.focus(); + + if (editor.find("." + dialogName).length < 1) + { + var dialogHTML = "
" + + "" + + "" + + "
" + + "" + + "" + + "
" + + "" + + "" + + "
" + + "" + + "" + + "
" + + "
"; + + dialog = this.createDialog({ + name : dialogName, + title : dialogLang.title, + width : 380, + height : 296, + content : dialogHTML, + mask : settings.dialogShowMask, + drag : settings.dialogDraggable, + lockScreen : settings.dialogLockScreen, + maskStyle : { + opacity : settings.dialogMaskOpacity, + backgroundColor : settings.dialogMaskBgColor + }, + buttons : { + enter : [lang.buttons.enter, function() { + var name = this.find("[data-name]").val(); + var url = this.find("[data-url]").val(); + var rid = this.find("[data-url-id]").val(); + var title = this.find("[data-title]").val(); + + if (name === "") + { + alert(dialogLang.nameEmpty); + return false; + } + + if (rid === "") + { + alert(dialogLang.idEmpty); + return false; + } + + if (url === "http://" || url === "") + { + alert(dialogLang.urlEmpty); + return false; + } + + //cm.replaceSelection("[" + title + "][" + name + "]\n[" + name + "]: " + url + ""); + cm.replaceSelection("[" + name + "][" + rid + "]"); + + if (selection === "") { + cm.setCursor(cursor.line, cursor.ch + 1); + } + + title = (title === "") ? "" : " \"" + title + "\""; + + cm.setValue(cm.getValue() + "\n[" + rid + "]: " + url + title + ""); + + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + + return false; + }], + cancel : [lang.buttons.cancel, function() { + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + + return false; + }] + } + }); + } + + dialog = editor.find("." + dialogName); + dialog.find("[data-name]").val("[" + ReLinkId + "]"); + dialog.find("[data-url-id]").val(""); + dialog.find("[data-url]").val("http://"); + dialog.find("[data-title]").val(selection); + + this.dialogShowMask(dialog); + this.dialogLockScreen(); + dialog.show(); + + ReLinkId++; + }; + + }; + + // 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); + } + +})(); diff --git a/public/editormd/plugins/table-dialog/table-dialog.js b/public/editormd/plugins/table-dialog/table-dialog.js index 366083f25..cac8c2460 100644 --- a/public/editormd/plugins/table-dialog/table-dialog.js +++ b/public/editormd/plugins/table-dialog/table-dialog.js @@ -1,218 +1,220 @@ -/*! - * Table dialog plugin for Editor.md - * - * @file table-dialog.js - * @author pandao - * @version 1.2.1 - * @updateTime 2015-06-09 - * {@link https://github.com/pandao/editor.md} - * @license MIT - */ - -(function() { - - var factory = function (exports) { - - var $ = jQuery; - var pluginName = "table-dialog"; - - var langs = { - "zh-cn" : { - toolbar : { - table : "表格" - }, - dialog : { - table : { - title : "添加表格", - cellsLabel : "单元格数", - alignLabel : "对齐方式", - rows : "行数", - cols : "列数", - aligns : ["默认", "左对齐", "居中对齐", "右对齐"] - } - } - }, - "zh-tw" : { - toolbar : { - table : "添加表格" - }, - dialog : { - table : { - title : "添加表格", - cellsLabel : "單元格數", - alignLabel : "對齊方式", - rows : "行數", - cols : "列數", - aligns : ["默認", "左對齊", "居中對齊", "右對齊"] - } - } - }, - "en" : { - toolbar : { - table : "Tables" - }, - dialog : { - table : { - title : "Tables", - cellsLabel : "Cells", - alignLabel : "Align", - rows : "Rows", - cols : "Cols", - aligns : ["Default", "Left align", "Center align", "Right align"] - } - } - } - }; - - exports.fn.tableDialog = function() { - var _this = this; - var cm = this.cm; - var editor = this.editor; - var settings = this.settings; - var path = settings.path + "../plugins/" + pluginName +"/"; - var classPrefix = this.classPrefix; - var dialogName = classPrefix + pluginName, dialog; - - $.extend(true, this.lang, langs[this.lang.name]); - this.setToolbar(); - - var lang = this.lang; - var dialogLang = lang.dialog.table; - - var dialogContent = [ - "
", - "", - dialogLang.rows + "   ", - dialogLang.cols + "
", - "", - "
", - "
" - ].join("\n"); - - if (editor.find("." + dialogName).length > 0) - { - dialog = editor.find("." + dialogName); - - this.dialogShowMask(dialog); - this.dialogLockScreen(); - dialog.show(); - } - else - { - dialog = this.createDialog({ - name : dialogName, - title : dialogLang.title, - width : 360, - height : 244, - mask : settings.dialogShowMask, - drag : settings.dialogDraggable, - content : dialogContent, - lockScreen : settings.dialogLockScreen, - maskStyle : { - opacity : settings.dialogMaskOpacity, - backgroundColor : settings.dialogMaskBgColor - }, - buttons : { - enter : [lang.buttons.enter, function() { - var rows = parseInt(this.find("[data-rows]").val()); - var cols = parseInt(this.find("[data-cols]").val()); - var align = this.find("[name=\"table-align\"]:checked").val(); - var table = ""; - var hrLine = "------------"; - - var alignSign = { - _default : hrLine, - left : ":" + hrLine, - center : ":" + hrLine + ":", - right : hrLine + ":" - }; - - if ( rows > 1 && cols > 0) - { - for (var r = 0, len = rows; r < len; r++) - { - var row = []; - var head = []; - - for (var c = 0, len2 = cols; c < len2; c++) - { - if (r === 1) { - head.push(alignSign[align]); - } - - row.push(" "); - } - - if (r === 1) { - table += "| " + head.join(" | ") + " |" + "\n"; - } - - table += "| " + row.join( (cols === 1) ? "" : " | " ) + " |" + "\n"; - } - } - - cm.replaceSelection(table); - - this.hide().lockScreen(false).hideMask(); - - return false; - }], - - cancel : [lang.buttons.cancel, function() { - this.hide().lockScreen(false).hideMask(); - - return false; - }] - } - }); - } - - var faBtns = dialog.find(".fa-btns"); - - if (faBtns.html() === "") - { - var icons = ["align-justify", "align-left", "align-center", "align-right"]; - var _lang = dialogLang.aligns; - var values = ["_default", "left", "center", "right"]; - - for (var i = 0, len = icons.length; i < len; i++) - { - var checked = (i === 0) ? " checked=\"checked\"" : ""; - var btn = ""; - - faBtns.append(btn); - } - } - }; - - }; - - // 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); - } - -})(); +/*! + * Table dialog plugin for Editor.md + * + * @file table-dialog.js + * @author pandao + * @version 1.2.1 + * @updateTime 2015-06-09 + * {@link https://github.com/pandao/editor.md} + * @license MIT + */ + +(function() { + + var factory = function (exports) { + + var $ = jQuery; + var pluginName = "table-dialog"; + + var langs = { + "zh-cn" : { + toolbar : { + table : "表格" + }, + dialog : { + table : { + title : "添加表格", + cellsLabel : "单元格数", + alignLabel : "对齐方式", + rows : "行数", + cols : "列数", + aligns : ["默认", "左对齐", "居中对齐", "右对齐"] + } + } + }, + "zh-tw" : { + toolbar : { + table : "添加表格" + }, + dialog : { + table : { + title : "添加表格", + cellsLabel : "單元格數", + alignLabel : "對齊方式", + rows : "行數", + cols : "列數", + aligns : ["默認", "左對齊", "居中對齊", "右對齊"] + } + } + }, + "en" : { + toolbar : { + table : "Tables" + }, + dialog : { + table : { + title : "Tables", + cellsLabel : "Cells", + alignLabel : "Align", + rows : "Rows", + cols : "Cols", + aligns : ["Default", "Left align", "Center align", "Right align"] + } + } + } + }; + + exports.fn.tableDialog = function() { + var _this = this; + var cm = this.cm; + var editor = this.editor; + var settings = this.settings; + var path = settings.path + "../plugins/" + pluginName +"/"; + var classPrefix = this.classPrefix; + var dialogName = classPrefix + pluginName, dialog; + + $.extend(true, this.lang, langs[this.lang.name]); + this.setToolbar(); + + var lang = this.lang; + var dialogLang = lang.dialog.table; + + var dialogContent = [ + "
", + "", + dialogLang.rows + "   ", + dialogLang.cols + "
", + "", + "
", + "
" + ].join("\n"); + + if (editor.find("." + dialogName).length > 0) + { + dialog = editor.find("." + dialogName); + + this.dialogShowMask(dialog); + this.dialogLockScreen(); + dialog.show(); + } + else + { + dialog = this.createDialog({ + name : dialogName, + title : dialogLang.title, + width : 360, + height : 244, + mask : settings.dialogShowMask, + drag : settings.dialogDraggable, + content : dialogContent, + lockScreen : settings.dialogLockScreen, + maskStyle : { + opacity : settings.dialogMaskOpacity, + backgroundColor : settings.dialogMaskBgColor + }, + buttons : { + enter : [lang.buttons.enter, function() { + var rows = parseInt(this.find("[data-rows]").val()); + var cols = parseInt(this.find("[data-cols]").val()); + var align = this.find("[name=\"table-align\"]:checked").val(); + var table = ""; + var hrLine = "------------"; + + var alignSign = { + _default : hrLine, + left : ":" + hrLine, + center : ":" + hrLine + ":", + right : hrLine + ":" + }; + + if ( rows > 1 && cols > 0) + { + for (var r = 0, len = rows; r < len; r++) + { + var row = []; + var head = []; + + for (var c = 0, len2 = cols; c < len2; c++) + { + if (r === 1) { + head.push(alignSign[align]); + } + + row.push(" "); + } + + if (r === 1) { + table += "| " + head.join(" | ") + " |" + "\n"; + } + + table += "| " + row.join( (cols === 1) ? "" : " | " ) + " |" + "\n"; + } + } + + cm.replaceSelection(table); + + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + + return false; + }], + + cancel : [lang.buttons.cancel, function() { + this.hide().lockScreen(false).hideMask(); + cm.focus && cm.focus(); + + return false; + }] + } + }); + } + + var faBtns = dialog.find(".fa-btns"); + + if (faBtns.html() === "") + { + var icons = ["align-justify", "align-left", "align-center", "align-right"]; + var _lang = dialogLang.aligns; + var values = ["_default", "left", "center", "right"]; + + for (var i = 0, len = icons.length; i < len; i++) + { + var checked = (i === 0) ? " checked=\"checked\"" : ""; + var btn = ""; + + faBtns.append(btn); + } + } + }; + + }; + + // 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); + } + +})(); diff --git a/public/images/educoder/xcx/IDCard.png b/public/images/educoder/xcx/IDCard.png new file mode 100644 index 000000000..d64e02a14 Binary files /dev/null and b/public/images/educoder/xcx/IDCard.png differ diff --git a/public/images/educoder/xcx/camera.png b/public/images/educoder/xcx/camera.png new file mode 100644 index 000000000..0c9faedbf Binary files /dev/null and b/public/images/educoder/xcx/camera.png differ diff --git a/public/react/src/modules/paths/PathDetail/Addshixuns.js b/public/react/src/modules/paths/PathDetail/Addshixuns.js index 0c1a194e5..48951b5e1 100644 --- a/public/react/src/modules/paths/PathDetail/Addshixuns.js +++ b/public/react/src/modules/paths/PathDetail/Addshixuns.js @@ -62,7 +62,7 @@ class Addshixuns extends Component {

- this.AddShixunBox()} className="fl defalutGreyBorder color-grey-6 ml37"> + this.Addshixuns()} className="fl defalutGreyBorder color-grey-6 ml37"> - 选用实训项目 - 选择下面实训后,可以通过拖拽进行排序调整 + 新建实训项目

- this.Addshixuns()} className="fl defalutGreyBorder color-grey-6 ml37"> + this.AddShixunBox()} className="fl defalutGreyBorder color-grey-6 ml37"> - 添加实训项目 - 您只需输入实训名称即可完成实训项目的添加,进入实训详情后可进行具体配置操作 + 选用实训项目 + 选择下面实训后,可以通过拖拽进行排序调整

{selectShixun===true?