Dialog.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. MWF.xDesktop.requireApp("Template", "MForm", null, false);
  2. MWF.require("MWF.widget.ImageClipper", null, false);
  3. MWF.xApplication.MinderEditor.HyperLinkForm = new Class({
  4. Extends: MPopupForm,
  5. Implements: [Options, Events],
  6. options: {
  7. "style": "report",
  8. "width": 700,
  9. //"height": 300,
  10. "height": "300",
  11. "hasTop": true,
  12. "hasIcon": false,
  13. "draggable": true,
  14. "title" : "链接"
  15. },
  16. _createTableContent: function () {
  17. var html = "<table width='100%' bordr='0' cellpadding='7' cellspacing='0' styles='formTable' style='margin-top: 20px; '>" +
  18. "<tr><td styles='formTableTitle' lable='url' width='20%'></td>" +
  19. " <td styles='formTableValue14' item='url' colspan='3'></td></tr>" +
  20. "<tr><td styles='formTableTitle' lable='title'></td>" +
  21. " <td styles='formTableValue14' item='title' colspan='3'></td></tr>" +
  22. "</table>";
  23. this.formTableArea.set("html", html);
  24. var data = this.app.minder.queryCommandValue('HyperLink');
  25. this.form = new MForm(this.formTableArea, data, {
  26. isEdited: true,
  27. style : "report",
  28. hasColon : true,
  29. itemTemplate: {
  30. url: { text : "链接地址", notEmpty : true,
  31. validRule : { isInvalid : function( value, it ){
  32. 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]*)?$';
  33. var R_URL = new RegExp(urlRegex, 'i');
  34. return R_URL.test( value )
  35. }.bind(this)},
  36. validMessage : { isInvalid : "请输入正确的链接" },
  37. attr : { placeholder : "必填:以 http(s):// 或 ftp:// 开头" }
  38. },
  39. title: { text : "提示文本", attr : { placeholder : "选填:鼠标在链接上悬停时提示的文本" } }
  40. }
  41. }, this.app);
  42. this.form.load();
  43. },
  44. _createBottomContent: function () {
  45. if (this.isNew || this.isEdited) {
  46. this.okActionNode = new Element("button.inputOkButton", {
  47. "styles": this.css.inputOkButton,
  48. "text": "确定"
  49. }).inject(this.formBottomNode);
  50. this.okActionNode.addEvent("click", function (e) {
  51. this.save(e);
  52. }.bind(this));
  53. }
  54. this.removeAction = new Element("button.inputCancelButton", {
  55. "styles": this.css.inputCancelButton,
  56. "text": "删除链接"
  57. }).inject(this.formBottomNode);
  58. this.removeAction.addEvent("click", function (e) {
  59. this.remove(e);
  60. }.bind(this));
  61. this.cancelActionNode = new Element("button.inputCancelButton", {
  62. "styles": (this.isEdited || this.isNew || this.getEditPermission() ) ? this.css.inputCancelButton : this.css.inputCancelButton_long,
  63. "text": "关闭"
  64. }).inject(this.formBottomNode);
  65. this.cancelActionNode.addEvent("click", function (e) {
  66. this.close(e);
  67. }.bind(this));
  68. },
  69. save: function(){
  70. var data = this.form.getResult(true,null,true,false,true);
  71. if( data ){
  72. this.app.minder.execCommand('HyperLink', data.url, data.title || '');
  73. this.close();
  74. }
  75. },
  76. remove: function( ev ){
  77. this.app.minder.execCommand('HyperLink', null );
  78. this.close();
  79. }
  80. });
  81. //MWF.xApplication.MinderEditor.ImageForm = new Class({
  82. // Extends: MPopupForm,
  83. // Implements: [Options, Events],
  84. // options: {
  85. // "style": "report",
  86. // "width": 800,
  87. // "height": 640,
  88. // "hasTop": true,
  89. // "hasIcon": false,
  90. // "draggable": true,
  91. // "title" : "图片"
  92. // },
  93. // createContent: function () {
  94. //
  95. // this.createTab();
  96. //
  97. // this.formContentNode = new Element("div.formContentNode", {
  98. // "styles": this.css.formContentNode
  99. // }).inject(this.formNode);
  100. //
  101. // this.formTableContainer = new Element("div.formTableContainer", {
  102. // "styles": this.css.formTableContainer
  103. // }).inject(this.formContentNode);
  104. //
  105. // this.formTableArea = new Element("div.formTableArea", {
  106. // "styles": this.css.formTableArea
  107. // }).inject(this.formTableContainer);
  108. //
  109. // this._createTableContent();
  110. // },
  111. // _createTableContent: function () {
  112. //
  113. // this.linkContainer = new Element("div.linkContainer").inject(this.formTableArea);
  114. //
  115. // var html = "<table width='100%' bordr='0' cellpadding='7' cellspacing='0' styles='formTable' style='margin-top: 20px; '>" +
  116. // "<tr><td styles='formTableTitle' lable='url' width='20%'></td>" +
  117. // " <td styles='formTableValue14' item='url' colspan='3'></td></tr>" +
  118. // "<tr><td styles='formTableTitle' lable='title'></td>" +
  119. // " <td styles='formTableValue14' item='title' colspan='3'></td></tr>" +
  120. // "<tr><td styles='formTableTitle'>预览:</td>" +
  121. // " <td styles='formTableValue14' item='preview' colspan='3'></td></tr>" +
  122. // "</table>";
  123. // this.linkContainer.set("html", html);
  124. //
  125. // var data = this.app.minder.queryCommandValue('image');
  126. //
  127. // this.linkform = new MForm(this.linkContainer, data, {
  128. // isEdited: true,
  129. // style : "report",
  130. // hasColon : true,
  131. // itemTemplate: {
  132. // url: { text : "图片地址", notEmpty : true,
  133. // validRule : { isInvalid : function( value, it ){
  134. // var R_URL = /^https?\:\/\/\w+/;
  135. // return R_URL.test( value )
  136. // }.bind(this)},
  137. // validMessage : { isInvalid : "请输入正确的链接" },
  138. // attr : { placeholder : "必填:以 http(s):// 开始" },
  139. // event : { blur : function( it ){
  140. // if( it.getValue() )it.form.getItem("preview").setValue( it.getValue() )
  141. // }.bind(this)}
  142. // },
  143. // title: { text : "提示文本", attr : { placeholder : "选填:鼠标在图片上悬停时提示的文本" } },
  144. // preview : { type : "img", defaultValue : data.url || "", style : { "max-width" : "400px", "max-height" : "260px" } }
  145. // }
  146. // }, this.app);
  147. // this.linkform.load();
  148. //
  149. //
  150. //
  151. // this.uploadContainer = new Element("div.uploadContainer", { styles : {"display":"none"} }).inject( this.formTableArea );
  152. //
  153. // var html = "<table width='100%' bordr='0' cellpadding='0' cellspacing='0' styles='formTable' style='margin-top: 20px; '>" +
  154. // "<tr><td item='image' colspan='4' style='padding-bottom: 10px;'></td></tr>" +
  155. // "<tr><td styles='formTableTitle' lable='title2' width='20%'></td>" +
  156. // " <td styles='formTableValue14' item='title2' colspan='3'></td></tr>" +
  157. // "</table>";
  158. // this.uploadContainer.set("html", html);
  159. //
  160. // var data = this.app.minder.queryCommandValue('image');
  161. //
  162. // this.uploadform = new MForm(this.uploadContainer, data, {
  163. // isEdited: true,
  164. // style : "report",
  165. // hasColon : true,
  166. // itemTemplate: {
  167. // title2: { text : "提示文本", attr : { placeholder : "选填:鼠标在图片上悬停时提示的文本" } }
  168. // }
  169. // }, this.app);
  170. // this.uploadform.load();
  171. //
  172. // this.image = new MWF.widget.ImageClipper(this.uploadContainer.getElement("[item='image']"), {
  173. // "aspectRatio": 0,
  174. // "description" : "",
  175. // "imageUrl" : "",
  176. // "ratioAdjustedEnable" : true,
  177. // "reference" : this.app.data.id || "1111",
  178. // "referenceType": "mindInfo",
  179. // "fromFileEnable" : false,
  180. // "resetEnable" : true
  181. // });
  182. // this.image.load();
  183. //
  184. // },
  185. // createTab: function(){
  186. // var _self = this;
  187. //
  188. // this.tabContainer = new Element("div.formTabContainer",{
  189. // styles : this.css.formTabContainer
  190. // }).inject(this.formNode);
  191. //
  192. // var tabNode = new Element("div.formTabNode", {
  193. // "styles": this.css.formTabNode,
  194. // "text" : "外链图片"
  195. // }).inject(this.tabContainer);
  196. // tabNode.addEvents({
  197. // "mouseover" : function(){ if( _self.currentTabNode != this.node)this.node.setStyles(_self.css.formTabNode_over) }.bind({node : tabNode }),
  198. // "mouseout" : function(){ if( _self.currentTabNode != this.node)this.node.setStyles(_self.css.formTabNode) }.bind({node : tabNode }),
  199. // "click":function(){
  200. // if( _self.currentTabNode )_self.currentTabNode.setStyles(_self.css.formTabNode);
  201. // _self.currentTabNode = this.node;
  202. // this.node.setStyles(_self.css.formTabNode_current);
  203. // _self.linkContainer.setStyle("display","");
  204. // _self.uploadContainer.setStyle("display","none");
  205. // }.bind({ node : tabNode })
  206. // })
  207. // tabNode.setStyles( this.css.formTabNode_current );
  208. // _self.currentTabNode = tabNode;
  209. //
  210. // var tabNode = new Element("div.tabNode", {
  211. // "styles": this.css.formTabNode,
  212. // "text" : "上传图片"
  213. // }).inject(this.tabContainer);
  214. // tabNode.addEvents({
  215. // "mouseover" : function(){ if( _self.currentTabNode != this.node)this.node.setStyles(_self.css.formTabNode_over) }.bind({node : tabNode }),
  216. // "mouseout" : function(){ if( _self.currentTabNode != this.node)this.node.setStyles(_self.css.formTabNode) }.bind({node : tabNode }),
  217. // "click":function(){
  218. // if( _self.currentTabNode )_self.currentTabNode.setStyles(_self.css.formTabNode);
  219. // _self.currentTabNode = this.node;
  220. // this.node.setStyles(_self.css.formTabNode_current);
  221. // _self.linkContainer.setStyle("display","none");
  222. // _self.uploadContainer.setStyle("display","");
  223. // }.bind({ node : tabNode })
  224. // })
  225. // },
  226. // _createBottomContent: function () {
  227. //
  228. // if (this.isNew || this.isEdited) {
  229. //
  230. // this.okActionNode = new Element("button.inputOkButton", {
  231. // "styles": this.css.inputOkButton,
  232. // "text": "确定"
  233. // }).inject(this.formBottomNode);
  234. //
  235. // this.okActionNode.addEvent("click", function (e) {
  236. // this.save(e);
  237. // }.bind(this));
  238. // }
  239. //
  240. // this.removeAction = new Element("button.inputCancelButton", {
  241. // "styles": this.css.inputCancelButton,
  242. // "text": "删除图片"
  243. // }).inject(this.formBottomNode);
  244. //
  245. // this.removeAction.addEvent("click", function (e) {
  246. // this.remove(e);
  247. // }.bind(this));
  248. //
  249. // this.cancelActionNode = new Element("button.inputCancelButton", {
  250. // "styles": (this.isEdited || this.isNew || this.getEditPermission() ) ? this.css.inputCancelButton : this.css.inputCancelButton_long,
  251. // "text": "关闭"
  252. // }).inject(this.formBottomNode);
  253. //
  254. // this.cancelActionNode.addEvent("click", function (e) {
  255. // this.close(e);
  256. // }.bind(this));
  257. //
  258. // },
  259. // save: function(){
  260. // if( this.image.resizedImage ){
  261. // this.image.uploadImage( function( json ){
  262. // var data = {
  263. // url : MWF.xDesktop.getImageSrc( json.id ),
  264. // title : this.uploadform.getResult(true,null,true,false,true)["title2"]
  265. // };
  266. // this.app.minder.execCommand('image', data.url, data.title || '', json.id);
  267. // this.close();
  268. // }.bind(this));
  269. // }else{
  270. // var data = this.linkform.getResult(true,null,true,false,true);
  271. // if( data ){
  272. // this.app.minder.execCommand('image', data.url, data.title || '', '');
  273. // this.close();
  274. // }
  275. // }
  276. // },
  277. // remove: function( ev ){
  278. // this.app.minder.execCommand('image', '' );
  279. // this.close();
  280. // },
  281. // setFormNodeSize: function (width, height, top, left) {
  282. // if (!width)width = this.options.width ? this.options.width : "50%";
  283. // if (!height)height = this.options.height ? this.options.height : "50%";
  284. // if (!top) top = this.options.top ? this.options.top : 0;
  285. // if (!left) left = this.options.left ? this.options.left : 0;
  286. //
  287. // var containerSize = this.container.getSize();
  288. // if( containerSize.x < width )width = containerSize.x;
  289. // if( containerSize.y < height )height = containerSize.y;
  290. //
  291. // var allSize = this.app.content.getSize();
  292. // var limitWidth = allSize.x; //window.screen.width
  293. // var limitHeight = allSize.y; //window.screen.height
  294. //
  295. // "string" == typeof width && (1 < width.length && "%" == width.substr(width.length - 1, 1)) && (width = parseInt(limitWidth * parseInt(width, 10) / 100, 10));
  296. // "string" == typeof height && (1 < height.length && "%" == height.substr(height.length - 1, 1)) && (height = parseInt(limitHeight * parseInt(height, 10) / 100, 10));
  297. // 300 > width && (width = 300);
  298. // 220 > height && (height = 220);
  299. //
  300. // top = top || parseInt((limitHeight - height) / 2, 10); //+appTitleSize.y);
  301. // left = left || parseInt((limitWidth - width) / 2, 10);
  302. //
  303. // this.formAreaNode.setStyles({
  304. // "width": "" + width + "px",
  305. // "height": "" + height + "px",
  306. // "top": "" + top + "px",
  307. // "left": "" + left + "px"
  308. // });
  309. //
  310. // this.formNode.setStyles({
  311. // "width": "" + width + "px",
  312. // "height": "" + height + "px"
  313. // });
  314. //
  315. // var iconSize = this.formIconNode ? this.formIconNode.getSize() : {x: 0, y: 0};
  316. // var topSize = this.formTopNode ? this.formTopNode.getSize() : {x: 0, y: 0};
  317. // var bottomSize = this.formBottomNode ? this.formBottomNode.getSize() : {x: 0, y: 0};
  318. // var tabSize = this.tabContainer ? this.tabContainer.getSize() : {x: 0, y: 0};
  319. //
  320. // var contentHeight = height - iconSize.y - topSize.y - bottomSize.y - tabSize.y;
  321. // //var formMargin = formHeight -iconSize.y;
  322. // this.formContentNode.setStyles({
  323. // "height": "" + contentHeight + "px"
  324. // });
  325. // this.formTableContainer.setStyles({
  326. // "height": "" + contentHeight + "px"
  327. // });
  328. // }
  329. //});
  330. MWF.xApplication.MinderEditor.NoteForm = new Class({
  331. Extends: MPopupForm,
  332. Implements: [Options, Events],
  333. options: {
  334. "style": "report",
  335. "width": 300,
  336. "height": "100%",
  337. "right" : 0,
  338. "hasTop": true,
  339. "hasIcon": false,
  340. "hasMask" : false,
  341. "hasBottom" : false,
  342. "draggable": true,
  343. "resizeable": true,
  344. "maxAction" : true,
  345. "title" : "备注"
  346. },
  347. _createTableContent: function () {
  348. this.formTableContainer.setStyle("width","100%");
  349. this.formTableArea.setStyle("height","100%");
  350. var html = "<div item='content' style='height: 100%;'></div>";
  351. this.formTableArea.set("html", html);
  352. MWF.xDesktop.requireApp("Template", "MForm", function () {
  353. this.form = new MForm(this.formTableArea, {}, {
  354. style: "report",
  355. isEdited: true,
  356. itemTemplate: {
  357. content: { type : "rtf", RTFConfig : {
  358. //skin : "bootstrapck",
  359. "resize_enabled": false,
  360. toolbar : [
  361. { name: 'document', items : [ 'Preview' ] },
  362. //{ name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
  363. { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','-','RemoveFormat' ] },
  364. //{ name: 'paragraph', items : [ 'JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock' ] },
  365. { name: 'styles', items : [ 'Styles','Format','Font','FontSize' ] },
  366. { name: 'colors', items : [ 'TextColor','BGColor' ] },
  367. { name: 'links', items : [ 'Link','Unlink' ] },
  368. //{ name: 'insert', items : [ 'Image' ] },
  369. { name: 'tools', items : [ 'Maximize','-','About' ] }
  370. ]
  371. }}
  372. }
  373. }, this.app);
  374. this.form.load();
  375. }.bind(this), true);
  376. },
  377. _setNodesSize : function( width, height, formContentHeight, formTableHeight ){
  378. this.form.getItem("content").editor.resize(null,formTableHeight );
  379. }
  380. });
  381. //MWF.xApplication.MinderEditor.NoteForm = new Class({
  382. // Extends: MPopupForm,
  383. // Implements: [Options, Events],
  384. // options: {
  385. // "style": "report",
  386. // "width": 300,
  387. // "height": "100%",
  388. // "right" : 0,
  389. // "hasTop": true,
  390. // "hasIcon": false,
  391. // "hasMask" : false,
  392. // "hasBottom" : false,
  393. // "draggable": true,
  394. // "resizeable": true,
  395. // "maxAction" : true,
  396. // "title" : "备注"
  397. // },
  398. // _createTableContent: function () {
  399. // this.formTableContainer.setStyle("width","100%");
  400. // this.formTableArea.setStyle("height","100%");
  401. // var codeMirrorPath = COMMON.contentPath+"/res/framework/codemirror";
  402. // var markedPath = COMMON.contentPath+"/res/framework/marked";
  403. //
  404. // var jsModules = [
  405. // codeMirrorPath + "/lib/codemirror.js",
  406. // codeMirrorPath + "/mode/xml/xml.js",
  407. // codeMirrorPath + "/mode/javascript/javascript.js",
  408. // codeMirrorPath + "/mode/css/css.js",
  409. // codeMirrorPath + "/mode/htmlmixed/htmlmixed.js",
  410. // codeMirrorPath + "/mode/markdown/markdown.js",
  411. // codeMirrorPath + "/addon/mode/overlay.js",
  412. // codeMirrorPath + "/mode/gfm/gfm.js",
  413. // markedPath + "/lib/marked.js"
  414. // ];
  415. //
  416. // COMMON.AjaxModule.loadCss( codeMirrorPath + "/lib/codemirror.css", function () {
  417. // COMMON.AjaxModule.load( jsModules, function () {
  418. // this.textarea = new Element("textarea").inject(this.formTableArea);
  419. // var codeMirrorEditor = CodeMirror.fromTextArea(this.textarea, {
  420. // theme: "default",
  421. // gfm: true,
  422. // breaks: true,
  423. // lineWrapping : true,
  424. // mode: 'gfm',
  425. // dragDrop: false,
  426. // lineNumbers:true
  427. // });
  428. // codeMirrorEditor.setSize("100%","50%");
  429. //
  430. // this.previewer = new Element("div").inject(this.formTableArea);
  431. // marked.setOptions({
  432. // gfm: true,
  433. // tables: true,
  434. // breaks: true,
  435. // pedantic: false,
  436. // sanitize: true,
  437. // smartLists: true,
  438. // smartypants: false
  439. // });
  440. // var str = "月份|收入|支出\n"+
  441. // "----|----|---\n"+
  442. // "8 |1000|500\n"+
  443. // "9 |1200|600\n"+
  444. // "10 |1400|650\n";
  445. // this.previewer.set("html",marked(str));
  446. // }.bind(this));
  447. // }.bind(this));
  448. // },
  449. // save: function(){
  450. //
  451. // this.app.minder.execCommand('note', data.url, data.title || '');
  452. // },
  453. // remove: function( ev ){
  454. // this.app.minder.execCommand('note', null );
  455. // }
  456. //});