MWF.xDesktop.requireApp("Template", "MForm", null, false); MWF.require("MWF.widget.ImageClipper", null, false); MWF.xApplication.MinderEditor.HyperLinkForm = new Class({ Extends: MPopupForm, Implements: [Options, Events], options: { "style": "report", "width": 700, //"height": 300, "height": "300", "hasTop": true, "hasIcon": false, "draggable": true, "title" : "链接" }, _createTableContent: function () { var html = "" + "" + " " + "" + " " + "
"; this.formTableArea.set("html", html); var data = this.app.minder.queryCommandValue('HyperLink'); this.form = new MForm(this.formTableArea, data, { isEdited: true, style : "report", hasColon : true, itemTemplate: { url: { text : "链接地址", notEmpty : true, validRule : { isInvalid : function( value, it ){ var urlRegex = '^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$'; var R_URL = new RegExp(urlRegex, 'i'); return R_URL.test( value ) }.bind(this)}, validMessage : { isInvalid : "请输入正确的链接" }, attr : { placeholder : "必填:以 http(s):// 或 ftp:// 开头" } }, title: { text : "提示文本", attr : { placeholder : "选填:鼠标在链接上悬停时提示的文本" } } } }, this.app); this.form.load(); }, _createBottomContent: function () { if (this.isNew || this.isEdited) { this.okActionNode = new Element("button.inputOkButton", { "styles": this.css.inputOkButton, "text": "确定" }).inject(this.formBottomNode); this.okActionNode.addEvent("click", function (e) { this.save(e); }.bind(this)); } this.removeAction = new Element("button.inputCancelButton", { "styles": this.css.inputCancelButton, "text": "删除链接" }).inject(this.formBottomNode); this.removeAction.addEvent("click", function (e) { this.remove(e); }.bind(this)); this.cancelActionNode = new Element("button.inputCancelButton", { "styles": (this.isEdited || this.isNew || this.getEditPermission() ) ? this.css.inputCancelButton : this.css.inputCancelButton_long, "text": "关闭" }).inject(this.formBottomNode); this.cancelActionNode.addEvent("click", function (e) { this.close(e); }.bind(this)); }, save: function(){ var data = this.form.getResult(true,null,true,false,true); if( data ){ this.app.minder.execCommand('HyperLink', data.url, data.title || ''); this.close(); } }, remove: function( ev ){ this.app.minder.execCommand('HyperLink', null ); this.close(); } }); MWF.xApplication.MinderEditor.ImageForm = new Class({ Extends: MPopupForm, Implements: [Options, Events], options: { "style": "report", "width": 800, "height": 640, "hasTop": true, "hasIcon": false, "draggable": true, "title" : "图片" }, createContent: function () { this.createTab(); this.formContentNode = new Element("div.formContentNode", { "styles": this.css.formContentNode }).inject(this.formNode); this.formTableContainer = new Element("div.formTableContainer", { "styles": this.css.formTableContainer }).inject(this.formContentNode); this.formTableArea = new Element("div.formTableArea", { "styles": this.css.formTableArea }).inject(this.formTableContainer); this._createTableContent(); }, _createTableContent: function () { this.linkContainer = new Element("div.linkContainer").inject(this.formTableArea); var html = "" + "" + " " + "" + " " + "" + " " + "
预览:
"; this.linkContainer.set("html", html); var data = this.app.minder.queryCommandValue('image'); this.linkform = new MForm(this.linkContainer, data, { isEdited: true, style : "report", hasColon : true, itemTemplate: { url: { text : "图片地址", notEmpty : true, validRule : { isInvalid : function( value, it ){ var R_URL = /^https?\:\/\/\w+/; return R_URL.test( value ) }.bind(this)}, validMessage : { isInvalid : "请输入正确的链接" }, attr : { placeholder : "必填:以 http(s):// 开始" }, event : { blur : function( it ){ if( it.getValue() )it.form.getItem("preview").setValue( it.getValue() ) }.bind(this)} }, title: { text : "提示文本", attr : { placeholder : "选填:鼠标在图片上悬停时提示的文本" } }, preview : { type : "img", defaultValue : data.url || "", style : { "max-width" : "400px", "max-height" : "260px" } } } }, this.app); this.linkform.load(); this.uploadContainer = new Element("div.uploadContainer", { styles : {"display":"none"} }).inject( this.formTableArea ); var html = "" + "" + "" + " " + "
"; this.uploadContainer.set("html", html); var data = this.app.minder.queryCommandValue('image'); this.uploadform = new MForm(this.uploadContainer, data, { isEdited: true, style : "report", hasColon : true, itemTemplate: { title2: { text : "提示文本", attr : { placeholder : "选填:鼠标在图片上悬停时提示的文本" } } } }, this.app); this.uploadform.load(); this.image = new MWF.widget.ImageClipper(this.uploadContainer.getElement("[item='image']"), { "aspectRatio": 0, "description" : "", "imageUrl" : "", "ratioAdjustedEnable" : true, "reference" : "1111", "referenceType": "forumDocument", "fromFileEnable" : false, "resetEnable" : true }); this.image.load(); }, createTab: function(){ var _self = this; this.tabContainer = new Element("div.formTabContainer",{ styles : this.css.formTabContainer }).inject(this.formNode); var tabNode = new Element("div.formTabNode", { "styles": this.css.formTabNode, "text" : "外链图片" }).inject(this.tabContainer); tabNode.addEvents({ "mouseover" : function(){ if( _self.currentTabNode != this.node)this.node.setStyles(_self.css.formTabNode_over) }.bind({node : tabNode }), "mouseout" : function(){ if( _self.currentTabNode != this.node)this.node.setStyles(_self.css.formTabNode) }.bind({node : tabNode }), "click":function(){ if( _self.currentTabNode )_self.currentTabNode.setStyles(_self.css.formTabNode); _self.currentTabNode = this.node; this.node.setStyles(_self.css.formTabNode_current); _self.linkContainer.setStyle("display",""); _self.uploadContainer.setStyle("display","none"); }.bind({ node : tabNode }) }) tabNode.setStyles( this.css.formTabNode_current ); _self.currentTabNode = tabNode; var tabNode = new Element("div.tabNode", { "styles": this.css.formTabNode, "text" : "上传图片" }).inject(this.tabContainer); tabNode.addEvents({ "mouseover" : function(){ if( _self.currentTabNode != this.node)this.node.setStyles(_self.css.formTabNode_over) }.bind({node : tabNode }), "mouseout" : function(){ if( _self.currentTabNode != this.node)this.node.setStyles(_self.css.formTabNode) }.bind({node : tabNode }), "click":function(){ if( _self.currentTabNode )_self.currentTabNode.setStyles(_self.css.formTabNode); _self.currentTabNode = this.node; this.node.setStyles(_self.css.formTabNode_current); _self.linkContainer.setStyle("display","none"); _self.uploadContainer.setStyle("display",""); }.bind({ node : tabNode }) }) }, _createBottomContent: function () { if (this.isNew || this.isEdited) { this.okActionNode = new Element("button.inputOkButton", { "styles": this.css.inputOkButton, "text": "确定" }).inject(this.formBottomNode); this.okActionNode.addEvent("click", function (e) { this.save(e); }.bind(this)); } this.removeAction = new Element("button.inputCancelButton", { "styles": this.css.inputCancelButton, "text": "删除图片" }).inject(this.formBottomNode); this.removeAction.addEvent("click", function (e) { this.remove(e); }.bind(this)); this.cancelActionNode = new Element("button.inputCancelButton", { "styles": (this.isEdited || this.isNew || this.getEditPermission() ) ? this.css.inputCancelButton : this.css.inputCancelButton_long, "text": "关闭" }).inject(this.formBottomNode); this.cancelActionNode.addEvent("click", function (e) { this.close(e); }.bind(this)); }, save: function(){ if( this.image.resizedImage ){ this.image.uploadImage( function( json ){ var data = { url : MWF.xDesktop.getImageSrc( json.id ), title : this.uploadform.getResult(true,null,true,false,true)["title2"] }; this.app.minder.execCommand('image', data.url, data.title || ''); this.close(); }.bind(this)); }else{ var data = this.linkform.getResult(true,null,true,false,true); if( data ){ this.app.minder.execCommand('image', data.url, data.title || ''); this.close(); } } }, remove: function( ev ){ this.app.minder.execCommand('image', '' ); this.close(); }, setFormNodeSize: function (width, height, top, left) { if (!width)width = this.options.width ? this.options.width : "50%"; if (!height)height = this.options.height ? this.options.height : "50%"; if (!top) top = this.options.top ? this.options.top : 0; if (!left) left = this.options.left ? this.options.left : 0; var containerSize = this.container.getSize(); if( containerSize.x < width )width = containerSize.x; if( containerSize.y < height )height = containerSize.y; var allSize = this.app.content.getSize(); var limitWidth = allSize.x; //window.screen.width var limitHeight = allSize.y; //window.screen.height "string" == typeof width && (1 < width.length && "%" == width.substr(width.length - 1, 1)) && (width = parseInt(limitWidth * parseInt(width, 10) / 100, 10)); "string" == typeof height && (1 < height.length && "%" == height.substr(height.length - 1, 1)) && (height = parseInt(limitHeight * parseInt(height, 10) / 100, 10)); 300 > width && (width = 300); 220 > height && (height = 220); top = top || parseInt((limitHeight - height) / 2, 10); //+appTitleSize.y); left = left || parseInt((limitWidth - width) / 2, 10); this.formAreaNode.setStyles({ "width": "" + width + "px", "height": "" + height + "px", "top": "" + top + "px", "left": "" + left + "px" }); this.formNode.setStyles({ "width": "" + width + "px", "height": "" + height + "px" }); var iconSize = this.formIconNode ? this.formIconNode.getSize() : {x: 0, y: 0}; var topSize = this.formTopNode ? this.formTopNode.getSize() : {x: 0, y: 0}; var bottomSize = this.formBottomNode ? this.formBottomNode.getSize() : {x: 0, y: 0}; var tabSize = this.tabContainer ? this.tabContainer.getSize() : {x: 0, y: 0}; var contentHeight = height - iconSize.y - topSize.y - bottomSize.y - tabSize.y; //var formMargin = formHeight -iconSize.y; this.formContentNode.setStyles({ "height": "" + contentHeight + "px" }); this.formTableContainer.setStyles({ "height": "" + contentHeight + "px" }); } }); MWF.xApplication.MinderEditor.NoteForm = new Class({ Extends: MPopupForm, Implements: [Options, Events], options: { "style": "report", "width": 300, "height": "100%", "right" : 0, "hasTop": true, "hasIcon": false, "hasMask" : false, "hasBottom" : false, "draggable": true, "resizeable": true, "maxAction" : true, "title" : "备注" }, _createTableContent: function () { this.formTableContainer.setStyle("width","100%"); this.formTableArea.setStyle("height","100%"); var html = "
"; this.formTableArea.set("html", html); MWF.xDesktop.requireApp("Template", "MForm", function () { this.form = new MForm(this.formTableArea, {}, { style: "report", isEdited: true, itemTemplate: { content: { type : "rtf", RTFConfig : { //skin : "bootstrapck", "resize_enabled": false, toolbar : [ { name: 'document', items : [ 'Preview' ] }, //{ name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] }, { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','-','RemoveFormat' ] }, //{ name: 'paragraph', items : [ 'JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock' ] }, { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] }, { name: 'colors', items : [ 'TextColor','BGColor' ] }, { name: 'links', items : [ 'Link','Unlink' ] }, //{ name: 'insert', items : [ 'Image' ] }, { name: 'tools', items : [ 'Maximize','-','About' ] } ] }} } }, this.app); this.form.load(); }.bind(this), true); }, _setNodesSize : function( width, height, formContentHeight, formTableHeight ){ this.form.getItem("content").editor.resize(null,formTableHeight ); } }); //MWF.xApplication.MinderEditor.NoteForm = new Class({ // Extends: MPopupForm, // Implements: [Options, Events], // options: { // "style": "report", // "width": 300, // "height": "100%", // "right" : 0, // "hasTop": true, // "hasIcon": false, // "hasMask" : false, // "hasBottom" : false, // "draggable": true, // "resizeable": true, // "maxAction" : true, // "title" : "备注" // }, // _createTableContent: function () { // this.formTableContainer.setStyle("width","100%"); // this.formTableArea.setStyle("height","100%"); // var codeMirrorPath = COMMON.contentPath+"/res/framework/codemirror"; // var markedPath = COMMON.contentPath+"/res/framework/marked"; // // var jsModules = [ // codeMirrorPath + "/lib/codemirror.js", // codeMirrorPath + "/mode/xml/xml.js", // codeMirrorPath + "/mode/javascript/javascript.js", // codeMirrorPath + "/mode/css/css.js", // codeMirrorPath + "/mode/htmlmixed/htmlmixed.js", // codeMirrorPath + "/mode/markdown/markdown.js", // codeMirrorPath + "/addon/mode/overlay.js", // codeMirrorPath + "/mode/gfm/gfm.js", // markedPath + "/lib/marked.js" // ]; // // COMMON.AjaxModule.loadCss( codeMirrorPath + "/lib/codemirror.css", function () { // COMMON.AjaxModule.load( jsModules, function () { // this.textarea = new Element("textarea").inject(this.formTableArea); // var codeMirrorEditor = CodeMirror.fromTextArea(this.textarea, { // theme: "default", // gfm: true, // breaks: true, // lineWrapping : true, // mode: 'gfm', // dragDrop: false, // lineNumbers:true // }); // codeMirrorEditor.setSize("100%","50%"); // // this.previewer = new Element("div").inject(this.formTableArea); // marked.setOptions({ // gfm: true, // tables: true, // breaks: true, // pedantic: false, // sanitize: true, // smartLists: true, // smartypants: false // }); // var str = "月份|收入|支出\n"+ // "----|----|---\n"+ // "8 |1000|500\n"+ // "9 |1200|600\n"+ // "10 |1400|650\n"; // this.previewer.set("html",marked(str)); // }.bind(this)); // }.bind(this)); // }, // save: function(){ // // this.app.minder.execCommand('note', data.url, data.title || ''); // }, // remove: function( ev ){ // this.app.minder.execCommand('note', null ); // } //});