Script.js 57 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319
  1. MWF.xApplication = MWF.xApplication || {};
  2. MWF.xApplication.portal = MWF.xApplication.portal || {};
  3. MWF.xApplication.portal.PageDesigner = MWF.xApplication.portal.PageDesigner || {};
  4. MWF.xDesktop.requireApp("portal.PageDesigner", "lp."+MWF.language, null, false);
  5. MWF.require("MWF.widget.JavascriptEditor", null, false);
  6. MWF.xApplication.portal.PageDesigner.Script = new Class({
  7. Implements: [Options, Events],
  8. options: {
  9. "style": "default"
  10. },
  11. initialize: function(designer, content, data, options){
  12. this.setOptions(options);
  13. this.path = "../x_component_portal_PageDesigner/$Script/";
  14. this.stylePath = "../x_component_portal_PageDesigner/$Script/"+this.options.style+"/style.css";
  15. this.viewPath = "../x_component_portal_PageDesigner/$Script/"+this.options.style+"/view.html";
  16. this.designer = designer;
  17. this.content = content;
  18. this.data = data;
  19. this.items = [];
  20. //this.categorys = {};
  21. this.moduleCategorys = {};
  22. this.pathCategorys = {};
  23. this.loadView();
  24. },
  25. loadView: function(){
  26. this.content.show();
  27. // this.content.set("load", {"onSuccess": function(){
  28. // this.node = this.content.getElement(".node");
  29. // this.listNode = this.content.getElement(".listNode");
  30. // this.listActionNode = this.content.getElement(".listActionNode");
  31. // this.actionButtons = this.content.getElements(".listActionButton");
  32. // this.listContentNode = this.content.getElement(".listContentNode");
  33. // this.separatorNode = this.content.getElement(".separatorNode");
  34. // this.scriptNode = this.content.getElement(".scriptNode");
  35. // this.scriptAreaNode = this.content.getElement(".scriptAreaNode");
  36. // this.listAreaNode = this.content.getElement(".listAreaNode");
  37. // this.scriptTabNode = this.content.getElement(".scriptTabNode");
  38. // o2.loadCss(this.stylePath, this.content, function(){
  39. // this.load();
  40. // }.bind(this));
  41. // }.bind(this)}).loadHtml(this.viewPath,{"module": this});
  42. this.content.loadHtml(this.viewPath,{"module": this}, function(){
  43. this.node = this.content.getElement(".node");
  44. this.listNode = this.content.getElement(".listNode");
  45. this.listActionNode = this.content.getElement(".listActionNode");
  46. this.actionButtons = this.content.getElements(".listActionButton");
  47. this.listContentNode = this.content.getElement(".listContentNode");
  48. this.separatorNode = this.content.getElement(".separatorNode");
  49. this.scriptNode = this.content.getElement(".scriptNode");
  50. this.scriptAreaNode = this.content.getElement(".scriptAreaNode");
  51. this.listAreaNode = this.content.getElement(".listAreaNode");
  52. this.scriptTabNode = this.content.getElement(".scriptTabNode");
  53. o2.loadCss(this.stylePath, this.content, function(){
  54. this.load();
  55. }.bind(this));
  56. }.bind(this));
  57. },
  58. load: function(){
  59. this.actionButtons[0].set("text", this.designer.lp.byModule);
  60. this.actionButtons[1].set("text", this.designer.lp.byPath);
  61. this.categoryType = "module";
  62. MWF.require("MWF.widget.Tab", null, false);
  63. this.scriptTab = new MWF.widget.Tab(this.scriptTabNode, {"style": "script"});
  64. this.scriptTab.load();
  65. this.setEvent();
  66. //form, page
  67. debugger;
  68. if (!this.data.jsheader) this.data.jsheader = {"code": "", "html": ""};
  69. this.addScriptItem(this.data.jsheader, "code", this.data, "jsheader");
  70. this.addScriptItem(this.data.css, "code", this.data, "css", "", "css");
  71. this.addScriptItem(this.data.validationOpinion, "code", this.data, "validationOpinion");
  72. this.addScriptItem(this.data.validationRoute, "code", this.data, "validationRoute");
  73. this.addScriptItem(this.data.validationFormCustom, "code", this.data, "validationFormCustom");
  74. this.addScriptItem(this.data.languageScript, "code", this.data, "languageScript");
  75. Object.each(this.data.events, function(event, key){
  76. //this.addScriptItem(event, "code", this.data, this.designer.lp.events+"."+key);
  77. this.addModuleEventScriptItem(event, "code", key, this.data);
  78. }.bind(this));
  79. Object.each(this.data.moduleList, function(v){
  80. this.createModuleScript(v);
  81. }.bind(this));
  82. },
  83. reload: function(){
  84. debugger;
  85. this.items.forEach(function(i){
  86. i.reload();
  87. });
  88. // while (this.items.length) this.items[0].destroy();
  89. // debugger;
  90. //
  91. // if (!this.data.jsheader) this.data.jsheader = {"code": "", "html": ""};
  92. // this.addScriptItem(this.data.jsheader, "code", this.data, "jsheader");
  93. // this.addScriptItem(this.data.css, "code", this.data, "css", "", "css");
  94. // this.addScriptItem(this.data.validationOpinion, "code", this.data, "validationOpinion");
  95. // this.addScriptItem(this.data.validationRoute, "code", this.data, "validationRoute");
  96. // this.addScriptItem(this.data.validationFormCustom, "code", this.data, "validationFormCustom");
  97. // Object.each(this.data.events, function(event, key){
  98. // this.addScriptItem(event, "code", this.data, this.designer.lp.events+"."+key);
  99. // }.bind(this));
  100. //
  101. // Object.each(this.data.moduleList, function(v){
  102. // this.createModuleScript(v);
  103. // }.bind(this));
  104. },
  105. createModuleScript: function(v){
  106. switch (v.type){
  107. case "OOButton":
  108. case "Button":
  109. this.loadButtonScript(v); break;
  110. case "Calendar":
  111. this.loadCalendarScript(v); break;
  112. case "OOCheckGroup":
  113. case "Checkbox":
  114. this.loadCheckboxScript(v); break;
  115. case "Div":
  116. this.loadDivScript(v); break;
  117. // case "Html":
  118. // this.loadHtmlScript(v); break;
  119. case "Iframe":
  120. this.loadIframeScript(v); break;
  121. case "Image":
  122. this.loadImageScript(v); break;
  123. case "Label":
  124. this.loadLabelScript(v); break;
  125. case "Personfield":
  126. this.loadPersonfieldScript(v); break;
  127. case "Org":
  128. this.loadOrgScript(v); break;
  129. case "OORadioGroup":
  130. case "Radio":
  131. this.loadRadioScript(v); break;
  132. case "OOSelect":
  133. case "Select":
  134. this.loadSelectScript(v); break;
  135. case "Source":
  136. this.loadSourceScript(v); break;
  137. case "SourceText":
  138. this.loadSourceTextScript(v); break;
  139. case "Stat":
  140. this.loadStatScript(v); break;
  141. case "SubSource":
  142. this.loadSubSourceScript(v); break;
  143. case "Tab$Content":
  144. this.loadTab$ContentScript(v); break;
  145. case "Tab$Page":
  146. this.loadTab$PageScript(v); break;
  147. case "Tab":
  148. this.loadTabScript(v); break;
  149. case "Table$Td":
  150. this.loadTable$TdScript(v); break;
  151. case "Table":
  152. this.loadTableScript(v); break;
  153. case "OOTextarea":
  154. case "Textarea":
  155. this.loadTextareaScript(v); break;
  156. case "OODatetime":
  157. case "OOInput":
  158. case "Textfield":
  159. this.loadTextfieldScript(v); break;
  160. case "Tree":
  161. this.loadTreeScript(v); break;
  162. case "View":
  163. this.loadViewScript(v); break;
  164. case "Actionbar":
  165. this.loadActionbarScript(v); break;
  166. case "Address":
  167. this.loadAddressScript(v); break;
  168. case "Attachment":
  169. this.loadAttachmentScript(v); break;
  170. case "Combox":
  171. this.loadComboxScript(v); break;
  172. case "Datagrid":
  173. this.loadDatagridScript(v); break;
  174. case "Datagrid$Data":
  175. this.loadDatagrid$DataScript(v); break;
  176. case "Datagrid$Title":
  177. this.loadDatagrid$TitleScript(v); break;
  178. case "Datatable":
  179. this.loadDatatableScript(v); break;
  180. case "Datatable$Data":
  181. this.loadDatatable$DataScript(v); break;
  182. case "Datatable$Title":
  183. this.loadDatatable$TitleScript(v); break;
  184. case "Datatemplate":
  185. this.loadDatatemplateScript(v); break;
  186. case "Htmleditor":
  187. this.loadHtmleditorScript(v); break;
  188. case "TinyMCEEditor":
  189. this.loadTinyMCEEditorScript(v); break;
  190. case "ImageClipper":
  191. this.loadImageClipperScript(v); break;
  192. case "WritingBoard":
  193. this.loadWritingBoardScript(v); break;
  194. case "Log":
  195. this.loadLogScript(v); break;
  196. case "Monitor":
  197. this.loadMonitorScript(v); break;
  198. case "Number":
  199. this.loadNumberScript(v); break;
  200. case "Currency":
  201. this.loadCurrencyScript(v); break;
  202. case "Office":
  203. this.loadOfficeScript(v); break;
  204. case "Opinion":
  205. this.loadOpinionScript(v); break;
  206. case "Orgfield":
  207. this.loadOrgfieldScript(v); break;
  208. case "Sidebar":
  209. this.loadSidebarScript(v); break;
  210. case "Subform":
  211. this.loadSubformScript(v); break;
  212. case "ViewSelector":
  213. this.loadViewSelectorScript(v); break;
  214. case "Statement":
  215. this.loadStatementScript(v); break;
  216. case "StatementSelector":
  217. this.loadStatementSelectorScript(v); break;
  218. case "Importer":
  219. this.loadImporterScript(v); break;
  220. case "Relatedlink":
  221. this.loadRelatedlinkScript(v); break;
  222. case "AssociatedDocument":
  223. this.loadAssociatedDocumentScript(v); break;
  224. case "Documenteditor":
  225. this.loadDocumenteditorScript(v); break;
  226. case "Common":
  227. this.loadCommonScript(v); break;
  228. case "ReadLog":
  229. this.loadEventsScript(v); break;
  230. case "WpsOffice":
  231. this.addScriptItem(v.readScript, "code", v, "readScript");
  232. this.loadEventsScript(v);
  233. break;
  234. case "YozoOffice":
  235. this.addScriptItem(v.readScript, "code", v, "readScript");
  236. this.loadEventsScript(v);
  237. break;
  238. case "Elautocomplete":
  239. this.loadVueElementScript(v, true);
  240. this.addScriptItem(v.itemScript, "code", v, "itemScript");
  241. break;
  242. case "Elbutton":
  243. this.loadVueElementScript(v); break;
  244. case "Elcheckbox":
  245. case "Elradio":
  246. this.loadVueElementScript(v, true);
  247. this.addScriptItem(v.itemScript, "code", v, "itemScript");
  248. break;
  249. case "Elcommon":
  250. // this.addScriptItem(v.vueTemplate, "code", v, "vueTemplate");
  251. this.addScriptItem(v.vueApp, "code", v, "vueApp");
  252. this.addScriptItem(v.vueCss, "code", v, "vueCss");
  253. this.loadEventsScript(v);
  254. break;
  255. case "Elcontainer":
  256. case "Elcontainer$Main":
  257. case "Elcontainer$Aside":
  258. case "Elcontainer$Footer":
  259. case "Elcontainer$Header":
  260. case "Elicon":
  261. this.loadEventsScript(v); break;
  262. case "Elinput":
  263. case "Elnumber":
  264. this.loadVueElementScript(v, true); break;
  265. case "Elselect":
  266. this.loadVueElementScript(v);
  267. this.addScriptItem(v.itemScript, "code", v, "itemScript");
  268. this.addScriptItem(v.itemGroupScript, "code", v, "itemGroupScript");
  269. this.addScriptItem(v.filterMethod, "code", v, "filterMethod");
  270. this.addScriptItem(v.remoteMethod, "code", v, "remoteMethod");
  271. break;
  272. case "Elslider":
  273. this.loadVueElementScript(v, true);
  274. this.addScriptItem(v.marksScript, "code", v, "marksScript");
  275. this.addScriptItem(v.formatTooltip, "code", v, "formatTooltip");
  276. break;
  277. case "Elswitch":
  278. this.loadVueElementScript(v, true); break;
  279. case "Eltime":
  280. this.loadVueElementScript(v, true);
  281. this.addScriptItem(v.selectableRange, "code", v, "selectableRange");
  282. break;
  283. case "Eldate":
  284. this.loadVueElementScript(v, true);
  285. this.addScriptItem(v.disabledDate, "code", v, "disabledDate");
  286. break;
  287. case "Eldatetime":
  288. this.loadVueElementScript(v, true);
  289. this.addScriptItem(v.disabledDate, "code", v, "disabledDate");
  290. break;
  291. case "Elrate":
  292. this.loadVueElementScript(v, true);
  293. break;
  294. case "Elcolorpicker":
  295. this.loadVueElementScript(v, true);
  296. break;
  297. case "Eltree":
  298. this.loadVueElementScript(v, false);
  299. this.addScriptItem(v.currentNodeKey, "code", v, "currentNodeKey");
  300. this.addScriptItem(v.defaultExpandedKeys, "code", v, "defaultExpandedKeys");
  301. this.addScriptItem(v.defaultCheckedKeys, "code", v, "defaultCheckedKeys");
  302. this.addScriptItem(v.allowDrag, "code", v, "allowDrag");
  303. this.addScriptItem(v.allowDrop, "code", v, "allowDrop");
  304. break;
  305. case "Eldropdown":
  306. this.loadVueElementScript(v, false);
  307. break;
  308. case "Elcarousel":
  309. this.loadVueElementScript(v, false);
  310. this.addScriptItem(v.dataScript, "code", v, "dataScript");
  311. this.addScriptItem(v.filterScript, "code", v, "filterScript");
  312. this.addScriptItem(v.requestBody, "code", v, "requestBody");
  313. break;
  314. }
  315. this.bindDataId(v);
  316. },
  317. createCategory: function(data, path, type){
  318. var category;
  319. var cType = type || this.categoryType;
  320. if (cType==="module"){
  321. if (data.type==="Form" || data.type==="Page"){
  322. category = new MWF.xApplication.portal.PageDesigner.Script.Category(this, data.type, 0, data, "module");
  323. this.moduleCategorys[data.type] = category;
  324. }else{
  325. category = new MWF.xApplication.portal.PageDesigner.Script.Category(this, "("+data.type+")-"+data.id, 0, data, "module");
  326. this.moduleCategorys[data.id] = category;
  327. }
  328. }else{
  329. category = new MWF.xApplication.portal.PageDesigner.Script.Category(this, path, 0, data, "path");
  330. this.pathCategorys[path] = category;
  331. }
  332. return category;
  333. },
  334. bindDataId: function(data){
  335. var id = data.id;
  336. Object.defineProperty(data, "id", {
  337. configurable : true,
  338. enumerable : true,
  339. "get": function(){return id;},
  340. "set": function(v){
  341. // this.items.each(function(item){
  342. // if (item.module.id===data.id) item.resetText(v);
  343. // });
  344. Object.each(this.moduleCategorys, function(category){
  345. if (category.module.id === data.id){
  346. category.resetName("("+data.type+")-"+v, v);
  347. }
  348. });
  349. id = v;
  350. //category.resetName(category.name.replace(/\-.*/, "-"+v));
  351. }.bind(this)
  352. });
  353. },
  354. loadButtonScript: function(data){
  355. this.loadEventsScript(data);
  356. },
  357. loadCalendarScript: function(data){
  358. this.addScriptItem(data.defaultValue, "code", data, "defaultValue");
  359. this.addScriptItem(data.validation, "code", data, "validation");
  360. this.addScriptItem(data.sectionByScript, "code", data, "sectionByScript");
  361. this.addScriptItem(data.dateTimeRangeScript, "code", data, "dateTimeRangeScript");
  362. this.addScriptItem(data.dateRangeScript, "code", data, "dateRangeScript");
  363. this.addScriptItem(data.timeRangeScript, "code", data, "timeRangeScript");
  364. this.addScriptItem(data.enableDate, "code", data, "enableDate");
  365. this.addScriptItem(data.enableHours, "code", data, "enableHours");
  366. this.addScriptItem(data.enableMinutes, "code", data, "enableMinutes");
  367. this.addScriptItem(data.enableSeconds, "code", data, "enableSeconds");
  368. this.loadEventsScript(data);
  369. },
  370. loadCheckboxScript: function(data){
  371. this.addScriptItem(data.defaultValue, "code", data, "defaultValue");
  372. this.addScriptItem(data.itemScript, "code", data, "itemScript");
  373. this.addScriptItem(data.validation, "code", data, "validation");
  374. this.addScriptItem(data.sectionByScript, "code", data, "sectionByScript");
  375. this.loadEventsScript(data);
  376. },
  377. loadDivScript: function(data){
  378. this.loadEventsScript(data);
  379. },
  380. loadIframeScript: function(data){
  381. this.addScriptItem(data.script, "code", data, "iframeScript");
  382. this.loadEventsScript(data);
  383. },
  384. loadImageScript: function(data){
  385. this.loadEventsScript(data);
  386. },
  387. loadLabelScript: function(data){
  388. this.addScriptItem(data.script, "code", data, "labelScript");
  389. this.loadEventsScript(data);
  390. },
  391. loadPersonfieldScript: function(data){
  392. this.addScriptItem(data.defaultValue, "code", data, "defaultValue");
  393. this.addScriptItem(data.validation, "code", data, "validation");
  394. this.addScriptItem(data.rangeKey, "code", data, "rangeKey");
  395. this.addScriptItem(data.rangeDutyKey, "code", data, "rangeDutyKey");
  396. this.addScriptItem(data.exclude, "code", data, "exclude");
  397. this.addScriptItem(data.rangeKey, "code", data, "sectionByScript");
  398. this.loadEventsScript(data);
  399. },
  400. loadOrgScript: function(data){
  401. this.addScriptItem(data.defaultValue, "code", data, "defaultValue");
  402. this.addScriptItem(data.validation, "code", data, "validation");
  403. this.addScriptItem(data.identityRangeKey, "code", data, "identityRangeKey");
  404. this.addScriptItem(data.unitRangeKey, "code", data, "unitRangeKey");
  405. this.addScriptItem(data.rangeDutyKey, "code", data, "rangeDutyKey");
  406. this.addScriptItem(data.exclude, "code", data, "exclude");
  407. this.addScriptItem(data.rangeKey, "code", data, "sectionByScript");
  408. this.loadEventsScript(data);
  409. },
  410. loadRadioScript: function(data){
  411. this.addScriptItem(data.defaultValue, "code", data, "defaultValue");
  412. this.addScriptItem(data.itemScript, "code", data, "itemScript");
  413. this.addScriptItem(data.validation, "code", data, "validation");
  414. this.addScriptItem(data.sectionByScript, "code", data, "sectionByScript");
  415. this.loadEventsScript(data);
  416. },
  417. loadSelectScript: function(data){
  418. this.addScriptItem(data.defaultValue, "code", data, "defaultValue");
  419. this.addScriptItem(data.itemScript, "code", data, "itemScript");
  420. this.addScriptItem(data.validation, "code", data, "validation");
  421. this.addScriptItem(data.sectionByScript, "code", data, "sectionByScript");
  422. this.loadEventsScript(data);
  423. },
  424. loadSourceScript: function(data){
  425. this.addScriptItem(data.cookies, "code", data, "cookies");
  426. this.addScriptItem(data.requestBody, "code", data, "requestBody");
  427. this.loadEventsScript(data);
  428. },
  429. loadSourceTextScript: function(data){
  430. this.addScriptItem(data.jsonText, "code", data, "jsonText");
  431. this.loadEventsScript(data);
  432. },
  433. loadStatScript: function(data){
  434. this.loadEventsScript(data);
  435. },
  436. loadSubSourceScript: function(data){
  437. this.loadEventsScript(data);
  438. },
  439. loadTabScript: function(data){
  440. this.loadEventsScript(data);
  441. },
  442. loadTab$PageScript: function(data){
  443. this.loadEventsScript(data);
  444. },
  445. loadTab$ContentScript: function(data){
  446. this.loadEventsScript(data);
  447. },
  448. loadTableScript: function(data){
  449. this.loadEventsScript(data);
  450. },
  451. loadTable$TdScript: function(data){
  452. this.loadEventsScript(data);
  453. },
  454. loadTextareaScript: function(data){
  455. this.addScriptItem(data.defaultValue, "code", data, "defaultValue");
  456. this.addScriptItem(data.validation, "code", data, "validation");
  457. this.addScriptItem(data.sectionByScript, "code", data, "sectionByScript");
  458. this.loadEventsScript(data);
  459. },
  460. loadTextfieldScript: function(data){
  461. this.addScriptItem(data.defaultValue, "code", data, "defaultValue");
  462. this.addScriptItem(data.validation, "code", data, "validation");
  463. this.addScriptItem(data.sectionByScript, "code", data, "sectionByScript");
  464. this.loadEventsScript(data);
  465. },
  466. loadTreeScript: function(data){
  467. this.addScriptItem(data.dataScript, "code", data, "dataScript");
  468. this.loadEventsScript(data);
  469. },
  470. loadViewScript: function(data){
  471. this.loadEventsScript(data);
  472. },
  473. loadRelatedlinkScript: function(data){
  474. this.addScriptItem(data.displayScript, "code", data, "displayScript");
  475. this.loadEventsScript(data);
  476. },
  477. loadAssociatedDocumentScript:function(data){
  478. this.addScriptItem(data.textStyleScript, "code", data, "textStyleScript");
  479. this.addScriptItem(data.displayScript, "code", data, "displayScript");
  480. this.loadEventsScript(data);
  481. },
  482. loadImporterScript: function(data){
  483. this.addScriptItem(data.excelName, "code", data, "excelName");
  484. this.loadEventsScript(data);
  485. },
  486. loadDocumenteditorScript: function(data){
  487. this.addScriptItem(data.allowEditScript, "code", data, "allowEditScript");
  488. this.addScriptItem(data.allowPrintScript, "code", data, "allowPrintScript");
  489. this.addScriptItem(data.allowHistoryScript, "code", data, "allowHistoryScript");
  490. this.addScriptItem(data.css, "code", data, "css", "css");
  491. this.addScriptItem(data.validation, "code", data, "validation");
  492. this.addScriptItem(data.ckeditConfigOptions, "code", data, "ckeditConfigOptions");
  493. this.addScriptItem(data.copiesSecretPriorityShowScript, "code", data, "copiesSecretPriorityShowScript");
  494. this.addScriptItem(data.copiesShowScript, "code", data, "copiesShowScript");
  495. this.addScriptItem(data.copiesValueScript, "code", data, "copiesValueScript");
  496. this.addScriptItem(data.secretShowScript, "code", data, "secretShowScript");
  497. this.addScriptItem(data.secretValueScript, "code", data, "secretValueScript");
  498. this.addScriptItem(data.priorityShowScript, "code", data, "priorityShowScript");
  499. this.addScriptItem(data.priorityValueScript, "code", data, "priorityValueScript");
  500. this.addScriptItem(data.redHeaderShowScript, "code", data, "redHeaderShowScript");
  501. this.addScriptItem(data.redHeaderValueScript, "code", data, "redHeaderValueScript");
  502. this.addScriptItem(data.redLineShowScript, "code", data, "redLineShowScript");
  503. this.addScriptItem(data.filenoShowScript, "code", data, "filenoShowScript");
  504. this.addScriptItem(data.filenoValueScript, "code", data, "filenoValueScript");
  505. this.addScriptItem(data.signerShowScript, "code", data, "signerShowScript");
  506. this.addScriptItem(data.signerValueScript, "code", data, "signerValueScript");
  507. this.addScriptItem(data.subjectShowScript, "code", data, "subjectShowScript");
  508. this.addScriptItem(data.subjectEditScript, "code", data, "subjectEditScript");
  509. this.addScriptItem(data.subjectValueScript, "code", data, "subjectValueScript");
  510. this.addScriptItem(data.mainSendShowScript, "code", data, "mainSendShowScript");
  511. this.addScriptItem(data.mainSendValueScript, "code", data, "mainSendValueScript");
  512. this.addScriptItem(data.attachmentShowScript, "code", data, "attachmentShowScript");
  513. this.addScriptItem(data.attachmentValueScript, "code", data, "attachmentValueScript");
  514. this.addScriptItem(data.attachmentTextEditScript, "code", data, "attachmentTextEditScript");
  515. this.addScriptItem(data.issuanceUnitShowScript, "code", data, "issuanceUnitShowScript");
  516. this.addScriptItem(data.issuanceUnitEditScript, "code", data, "issuanceUnitEditScript");
  517. this.addScriptItem(data.issuanceUnitValueScript, "code", data, "issuanceUnitValueScript");
  518. this.addScriptItem(data.issuanceDateShowScript, "code", data, "issuanceDateShowScript");
  519. this.addScriptItem(data.issuanceDateValueScript, "code", data, "issuanceDateValueScript");
  520. this.addScriptItem(data.annotationShowScript, "code", data, "annotationShowScript");
  521. this.addScriptItem(data.annotationValueScript, "code", data, "annotationValueScript");
  522. this.addScriptItem(data.copytoShowScript, "code", data, "copytoShowScript");
  523. this.addScriptItem(data.copytoValueScript, "code", data, "copytoValueScript");
  524. this.addScriptItem(data.copyto2ShowScript, "code", data, "copyto2ShowScript");
  525. this.addScriptItem(data.copyto2ValueScript, "code", data, "copyto2ValueScript");
  526. this.addScriptItem(data.editionUnitShowScript, "code", data, "editionUnitShowScript");
  527. this.addScriptItem(data.editionUnitValueScript, "code", data, "editionUnitValueScript");
  528. this.addScriptItem(data.editionDateShowScript, "code", data, "editionDateShowScript");
  529. this.addScriptItem(data.editionDateValueScript, "code", data, "editionDateValueScript");
  530. this.addScriptItem(data.meetingAttendShowScript, "code", data, "meetingAttendShowScript");
  531. this.addScriptItem(data.meetingAttendValueScript, "code", data, "meetingAttendValueScript");
  532. this.addScriptItem(data.meetingLeaveShowScript, "code", data, "meetingLeaveShowScript");
  533. this.addScriptItem(data.meetingLeaveValueScript, "code", data, "meetingLeaveValueScript");
  534. this.addScriptItem(data.meetingSitShowScript, "code", data, "meetingSitShowScript");
  535. this.addScriptItem(data.meetingSitValueScript, "code", data, "meetingSitValueScript");
  536. this.loadEventsScript(data);
  537. },
  538. loadCommonScript: function(data){
  539. this.loadEventsScript(data);
  540. },
  541. loadActionbarScript: function(data){
  542. if (data.tools){
  543. data.tools.each(function(tool){
  544. var item = this.addScriptItem(tool, "actionScript", data, "action.tools", tool.text);
  545. this.bindActionbarToolText(tool, item);
  546. }.bind(this));
  547. }
  548. },
  549. bindActionbarToolText: function(tool, item){
  550. var toolItem = item;
  551. var text = tool.text;
  552. Object.defineProperty(tool, "text", {
  553. configurable : true,
  554. enumerable : true,
  555. "get": function(){return text;},
  556. "set": function(v){
  557. if (toolItem){
  558. toolItem.par = v;
  559. toolItem.resetText();
  560. }
  561. text = v;
  562. }.bind(this)
  563. });
  564. },
  565. loadAddressScript: function(data){
  566. this.addScriptItem(data.defaultValue, "code", data, "defaultValue");
  567. this.addScriptItem(data.validation, "code", data, "validation");
  568. this.addScriptItem(data.sectionByScript, "code", data, "sectionByScript");
  569. this.loadEventsScript(data);
  570. },
  571. loadAttachmentScript: function(data){
  572. this.addScriptItem(data.validation, "code", data, "validation");
  573. this.loadEventsScript(data);
  574. },
  575. loadComboxScript: function(data){
  576. this.addScriptItem(data.itemScript, "code", data, "itemScript");
  577. this.addScriptItem(data.itemDynamic, "code", data, "itemDynamic");
  578. this.addScriptItem(data.defaultValue, "code", data, "defaultValue");
  579. this.addScriptItem(data.validation, "code", data, "validation");
  580. this.addScriptItem(data.sectionByScript, "code", data, "sectionByScript");
  581. this.loadEventsScript(data);
  582. },
  583. loadDatagridScript: function(data){
  584. this.addScriptItem(data.defaultData, "code", data, "defaultData");
  585. this.addScriptItem(data.editableScript, "code", data, "editableScript");
  586. this.addScriptItem(data.validation, "code", data, "validation");
  587. this.addScriptItem(data.sectionByScript, "code", data, "sectionByScript");
  588. this.addScriptItem(data.excelName, "code", data, "excelName");
  589. this.loadEventsScript(data);
  590. },
  591. loadDatagrid$DataScript: function(data){ this.loadEventsScript(data); },
  592. loadDatagrid$TitleScript: function(data){ this.loadEventsScript(data); },
  593. loadDatatableScript: function(data){
  594. this.addScriptItem(data.defaultData, "code", data, "defaultData");
  595. this.addScriptItem(data.editableScript, "code", data, "editableScript");
  596. this.addScriptItem(data.validation, "code", data, "validation");
  597. this.addScriptItem(data.sectionByScript, "code", data, "sectionByScript");
  598. this.addScriptItem(data.excelName, "code", data, "excelName");
  599. this.loadEventsScript(data);
  600. },
  601. loadDatatable$DataScript: function(data){ this.loadEventsScript(data); },
  602. loadDatatable$TitleScript: function(data){ this.loadEventsScript(data); },
  603. loadDatatemplateScript: function(data){
  604. this.addScriptItem(data.defaultData, "code", data, "defaultData");
  605. this.addScriptItem(data.editableScript, "code", data, "editableScript");
  606. this.addScriptItem(data.validation, "code", data, "validation");
  607. this.addScriptItem(data.sectionByScript, "code", data, "sectionByScript");
  608. this.addScriptItem(data.excelName, "code", data, "excelName");
  609. this.loadEventsScript(data);
  610. },
  611. loadHtmleditorScript: function(data){
  612. this.addScriptItem(data.config, "code", data, "config");
  613. this.loadEventsScript(data);
  614. },
  615. loadTinyMCEEditorScript: function(data){
  616. this.addScriptItem(data.config, "code", data, "config");
  617. this.loadEventsScript(data);
  618. },
  619. loadImageClipperScript: function(data){ this.loadEventsScript(data); },
  620. loadWritingBoardScript: function(data){ this.loadEventsScript(data); },
  621. loadLogScript: function(data){
  622. this.addScriptItem(data.filterScript, "code", data, "filterScript");
  623. this.loadEventsScript(data);
  624. },
  625. loadMonitorScript: function(data){ this.loadEventsScript(data); },
  626. loadNumberScript: function(data){
  627. this.addScriptItem(data.defaultValue, "code", data, "defaultValue");
  628. this.addScriptItem(data.validation, "code", data, "validation");
  629. this.addScriptItem(data.sectionByScript, "code", data, "sectionByScript");
  630. this.loadEventsScript(data);
  631. },
  632. loadCurrencyScript: function(data){
  633. this.addScriptItem(data.defaultValue, "code", data, "defaultValue");
  634. this.addScriptItem(data.validation, "code", data, "validation");
  635. this.addScriptItem(data.sectionByScript, "code", data, "sectionByScript");
  636. this.loadEventsScript(data);
  637. },
  638. loadOfficeScript: function(data){
  639. this.addScriptItem(data.readScript, "code", data, "readScript");
  640. this.addScriptItem(data.fileSite, "code", data, "fileSite");
  641. this.loadEventsScript(data);
  642. },
  643. loadOpinionScript: function(data){
  644. this.addScriptItem(data.validation, "code", data, "validation");
  645. this.loadEventsScript(data);
  646. },
  647. loadOrgfieldScript: function(data){
  648. this.addScriptItem(data.defaultValue, "code", data, "defaultValue");
  649. this.addScriptItem(data.validation, "code", data, "validation");
  650. this.addScriptItem(data.rangeKey, "code", data, "rangeKey");
  651. this.addScriptItem(data.exclude, "code", data, "exclude");
  652. this.addScriptItem(data.rangeKey, "code", data, "sectionByScript");
  653. this.loadEventsScript(data);
  654. },
  655. loadSidebarScript: function(data){
  656. if (data.tools){
  657. data.tools.each(function(tool){
  658. var item = this.addScriptItem(tool, "actionScript", data, "action.tools", tool.text);
  659. this.bindActionbarToolText(tool, item);
  660. }.bind(this));
  661. }
  662. },
  663. loadSubformScript: function(data){
  664. this.addScriptItem(data.subformScript, "code", data, "subformScript");
  665. this.loadEventsScript(data);
  666. },
  667. loadViewSelectorScript: function(data){
  668. this.addScriptItem(data.selectedScript, "code", data, "selectedScript");
  669. this.loadEventsScript(data);
  670. },
  671. loadStatementScript: function(data){
  672. this.loadEventsScript(data);
  673. },
  674. loadStatementSelectorScript: function(data){
  675. this.addScriptItem(data.selectedScript, "code", data, "selectedScript");
  676. },
  677. loadVueElementScript: function(data, isField){
  678. if (isField){
  679. this.addScriptItem(data.defaultValue, "code", data, "defaultValue");
  680. this.addScriptItem(data.validation, "code", data, "validation");
  681. this.addScriptItem(data.sectionByScript, "code", data, "sectionByScript");
  682. }
  683. this.addScriptItem(data.vueData, "code", data, "vueData");
  684. this.addScriptItem(data.vueMethods, "code", data, "vueMethods");
  685. this.addScriptItem(data.vueCss, "code", data, "vueCss", "css");
  686. this.loadEventsScript(data);
  687. },
  688. loadEventsScript: function(data){
  689. Object.each(data.events, function(event, key){
  690. this.addModuleEventScriptItem(event, "code", key, data);
  691. }.bind(this));
  692. },
  693. addScriptItem: function(data, key, module, path, par, mode){
  694. //if (!data) data = {};
  695. if (!module[path]) module[path] = {};
  696. data = module[path];
  697. var item = new MWF.xApplication.portal.PageDesigner.Script.Item(this, data, key, module, path, par, mode);
  698. this.items.push(item);
  699. return item;
  700. },
  701. addModuleEventScriptItem: function(event, key, eventName, data, par){
  702. var item = new MWF.xApplication.portal.PageDesigner.Script.Item(this, event, key, data, this.designer.lp.events+"."+eventName, par);
  703. this.items.push(item);
  704. return item;
  705. },
  706. deleteScriptItem: function(module, path, par){
  707. var category = this.moduleCategorys[module.id];
  708. if (category){
  709. var count = category.items.length;
  710. for (var i=0; i<count; i++){
  711. var item = category.items[i];
  712. if (item.module.id===module.id && item.path===path && ((par) ? item.par===par : true) ){
  713. item.destroy();
  714. i--; count--;
  715. }
  716. }
  717. }
  718. },
  719. setSize: function(){
  720. var size = this.content.getSize();
  721. var paddings = this.listAreaNode.getStyles("padding-top", "padding-bottom");
  722. var margins = this.listNode.getStyles("margin-top", "margin-bottom");
  723. var actionSize = this.listActionNode.getSize();
  724. var actionMargins = this.listActionNode.getStyles("margin-top", "margin-bottom");
  725. var h = size.y-paddings["padding-top"].toFloat()-paddings["padding-bottom"].toFloat()-margins["margin-top"].toFloat()-margins["margin-bottom"].toFloat()-5;
  726. this.separatorNode.setStyle("height", ""+h+"px");
  727. h = h-actionSize.y-actionMargins["margin-top"].toFloat()-actionMargins["margin-bottom"].toFloat();
  728. this.listNode.setStyle("height", ""+h+"px");
  729. //var scriptSize = this.scriptAreaNode.getSize();
  730. paddings = this.scriptAreaNode.getStyles("padding-top", "padding-bottom");
  731. margins = this.scriptNode.getStyles("margin-top", "margin-bottom");
  732. h = size.y-paddings["padding-top"].toFloat()-paddings["padding-bottom"].toFloat()-margins["margin-top"].toFloat()-margins["margin-bottom"].toFloat();
  733. this.scriptNode.setStyle("height", ""+h+"px");
  734. if (this.scriptTab) this.scriptTab.resize();
  735. // var tabSize = this.scriptTab.tabNodeContainer.getComputedSize();
  736. // var tabMarginTop = this.scriptTab.tabNodeContainer.getStyle("margin-top").toFloat();
  737. // var tabMarginBottom = this.scriptTab.tabNodeContainer.getStyle("margin-bottom").toFloat();
  738. // h = h-tabSize.totalHeight-tabMarginTop-tabMarginBottom;
  739. // this.scriptTab.contentNodeContainer.setStyle("height", ""+h+"px");
  740. },
  741. changeCategoryType: function(e){
  742. if (!e.target.hasClass("listActionButton_select")){
  743. this.actionButtons.removeClass("listActionButton_select");
  744. e.target.addClass("listActionButton_select");
  745. if (this.categoryType === "module"){
  746. this.changeCategoryTypeToPath();
  747. }else{
  748. this.changeCategoryTypeToModule();
  749. }
  750. }
  751. },
  752. changeCategoryTypeToPath: function(){
  753. this.categoryType = "path";
  754. this.items.each(function(item){ item.relocation(); }.bind(this));
  755. },
  756. changeCategoryTypeToModule: function(){
  757. this.categoryType = "module";
  758. this.items.each(function(item){ item.relocation(); }.bind(this));
  759. },
  760. setEvent: function(){
  761. this.setSize();
  762. this.setSizeFun = this.setSize.bind(this);
  763. this.designer.addEvent("resize", this.setSizeFun);
  764. this.actionButtons.addEvents({
  765. "click": function(e){
  766. this.changeCategoryType(e);
  767. }.bind(this)
  768. });
  769. new Drag(this.separatorNode, {
  770. "snap": 1,
  771. "onStart": function(el, e){
  772. var x = (Browser.name==="firefox") ? e.event.clientX : e.event.x;
  773. var y = (Browser.name==="firefox") ? e.event.clientY : e.event.y;
  774. el.store("position", {"x": x, "y": y});
  775. var size = this.listNode.getSize();
  776. el.store("initialWidth", size.x);
  777. }.bind(this),
  778. "onDrag": function(el, e){
  779. var x = (Browser.name==="firefox") ? e.event.clientX : e.event.x;
  780. // var y = e.event.y;
  781. var bodySize = this.content.getSize();
  782. var position = el.retrieve("position");
  783. var initialWidth = el.retrieve("initialWidth").toFloat();
  784. var dx =x.toFloat()- position.x.toFloat();
  785. var width = initialWidth+dx;
  786. if (width> bodySize.x/2) width = bodySize.x/2;
  787. if (width<40) width = 40;
  788. this.scriptAreaNode.setStyle("margin-left", width+3);
  789. this.listAreaNode.setStyle("width", width);
  790. if (this.jsEditor) this.jsEditor.resize();
  791. }.bind(this)
  792. });
  793. },
  794. createScriptEditor: function(callback){
  795. this.jsEditor = new MWF.widget.JavascriptEditor(this.scriptNode,{
  796. "option": {
  797. "value": "",
  798. "lineNumbers": true
  799. },
  800. "onPostLoad": function(){
  801. this.editor = this.jsEditor.editor;
  802. this.jsEditor.addEditorEvent("change", function() {
  803. this.fireEvent("change");
  804. }.bind(this));
  805. this.jsEditor.addEditorEvent("blur", function() {
  806. this.fireEvent("blur");
  807. }.bind(this));
  808. // this.editor.on("change", function() {
  809. // this.fireEvent("change");
  810. // }.bind(this));
  811. this.jsEditor.resize();
  812. if (callback) callback();
  813. this.fireEvent("postLoad");
  814. }.bind(this),
  815. "onSave": function(){
  816. this.fireEvent("change");
  817. this.fireEvent("save");
  818. }.bind(this)
  819. });
  820. this.jsEditor.load();
  821. },
  822. removeModule: function(data){
  823. var count = this.items.length;
  824. for (var i=0; i<count; i++){
  825. var item = this.items[i];
  826. if (item.module.id===data.id){
  827. item.destroy();
  828. i--; count--;
  829. }
  830. }
  831. var keys = Object.keys(this.moduleCategorys);
  832. keys.each(function(k){
  833. var category = this.moduleCategorys[k];
  834. if (category) if (category.module.id===data.id) category.destroy();
  835. }.bind(this));
  836. keys = Object.keys(this.pathCategorys);
  837. keys.each(function(k){
  838. var category = this.pathCategorys[k];
  839. if (category) if (!category.childrenNode.getFirst()) category.destroy();
  840. }.bind(this));
  841. // Object.each(this.pathCategorys, function(category){
  842. // if (!category.childrenNode.getFirst()) category.destroy();
  843. // }.bind(this));
  844. },
  845. checkCategorys: function(){
  846. var keys = Object.keys(this.moduleCategorys);
  847. keys.each(function(k){
  848. var category = this.moduleCategorys[k];
  849. if (category) if (!category.items.length) category.destroy(k);
  850. }.bind(this));
  851. keys = Object.keys(this.pathCategorys);
  852. keys.each(function(k){
  853. var category = this.pathCategorys[k];
  854. if (category) if (!category.childrenNode.getFirst()) category.destroy(k);
  855. }.bind(this));
  856. }
  857. });
  858. MWF.xApplication.portal.PageDesigner.Script.Category = new Class({
  859. initialize: function(script, name, level, module, type){
  860. this.script = script;
  861. this.name = name;
  862. this.module = module;
  863. this.level = level;
  864. this.type = type;
  865. this.items = [];
  866. this.load();
  867. },
  868. load: function(){
  869. var name = "";
  870. if (this.type==="path"){
  871. name = this.script.designer.lp.scriptTitle[this.name] || this.name;
  872. }else{
  873. var t;
  874. if (this.module.type==="Form" || this.module.type==="Page"){
  875. t = this.script.designer.lp.pageform;
  876. }else{
  877. t = this.module.type.toLowerCase();
  878. var tool = this.script.designer.toolsData[t];
  879. t = (tool) ? tool.text : t;
  880. }
  881. name = this.name.replace(/\(.*\)/, "("+t+")");
  882. }
  883. this.script.listContentNode.appendHTML("<div class='itemCategory'><div class='itemCategoryTitle'>" +
  884. "<div class='itemCategoryTitleIcon'></div><div class='itemCategoryTitleName' title='"+this.name+"'>"+name+"</div>" +
  885. "</div><div class='itemCategoryChildren'></div></div>");
  886. this.node = this.script.listContentNode.getLast();
  887. //this.blankNode = this.node.getElement(".itemCategoryTitleBlank");
  888. this.titleNode = this.node.getElement(".itemCategoryTitle");
  889. this.iconNode = this.node.getElement(".itemCategoryTitleIcon");
  890. this.nameNode = this.node.getElement(".itemCategoryTitleName");
  891. this.childrenNode = this.node.getElement(".itemCategoryChildren");
  892. var marginLeft = this.level.toInt()*10;
  893. this.node.setStyle("margin-left", ""+marginLeft+"px");
  894. this.titleNode.addEvents({
  895. "mouseover": function(){this.addClass("itemCategoryTitle_over");},
  896. "mouseout": function(){this.removeClass("itemCategoryTitle_over");},
  897. "click": function(){ this.toggle(); }.bind(this)
  898. });
  899. },
  900. hide: function(){
  901. this.node.hide();
  902. },
  903. show: function(){
  904. this.node.show();
  905. },
  906. toggle: function(){
  907. ((this.isExpand) ? this.collapse : this.expand).apply(this);
  908. },
  909. expand: function(){
  910. this.childrenNode.show();
  911. this.iconNode.addClass("itemCategoryTitleIcon_expand");
  912. this.isExpand = true;
  913. },
  914. collapse: function(){
  915. this.childrenNode.hide();
  916. this.iconNode.removeClass("itemCategoryTitleIcon_expand");
  917. this.isExpand = false;
  918. },
  919. resetName: function(name, id){
  920. delete this.script.moduleCategorys[this.module.id];
  921. this.script.moduleCategorys[id] = this;
  922. this.name = name;
  923. this.nameNode.set({"text": this.name, "title": this.name});
  924. this.items.each(function(item){
  925. item.resetText(id);
  926. }.bind(this));
  927. },
  928. destroy: function(k){
  929. delete this.script.moduleCategorys[k];
  930. delete this.script.pathCategorys[k];
  931. this.node.destroy();
  932. this.script.checkCategorys();
  933. MWF.release(this);
  934. }
  935. });
  936. MWF.xApplication.portal.PageDesigner.Script.Item = new Class({
  937. initialize: function(script, data, key, module, path, par, mode){
  938. this.script = script;
  939. this.data = data;
  940. this.key = key;
  941. this.module = module;
  942. this.path = path;
  943. this.text = path;
  944. this.par = par;
  945. this.mode = mode;
  946. this.bind();
  947. if (this.data[this.key]) this.createNode();
  948. },
  949. reload: function(){
  950. // if (this.value){
  951. if (this.data[this.key]){
  952. if (!this.node) this.createNode();
  953. //if (this.isShow)
  954. if (this.jsEditor){
  955. this.jsEditor.setValue(this.value);
  956. //this.editor.session.setValue(this.value);
  957. //this.jsEditor.node.show();
  958. }
  959. }
  960. // }else{
  961. // if (this.node) this.node.destroy();
  962. // if (this.isShow){
  963. // if (this.script.editor){
  964. // this.script.editor.setValue("");
  965. // this.script.jsEditor.node.hide();
  966. // }
  967. // this.isShow = false;
  968. // }
  969. // }
  970. },
  971. unShow: function(){
  972. if (this.script.editor){
  973. this.value.code = this.script.editor.getValue()
  974. }
  975. this.isShow = false;
  976. this.script.currentItem = null;
  977. },
  978. getCategory: function(){
  979. var category = null;
  980. if (this.script.categoryType==="module"){
  981. category = this.script.moduleCategorys[(this.module.type==="Form" || this.module.type==="Page") ? this.module.type : this.module.id];
  982. }else{
  983. category = this.script.pathCategorys[this.path];
  984. }
  985. return category || this.script.createCategory(this.module, this.path);
  986. },
  987. getText: function(id){
  988. var moduleId = id || this.module.id;
  989. var text = this.script.designer.lp.scriptTitle[this.path] || this.path;
  990. text = ((this.module.type==="Form" || this.module.type==="Page") ? this.module.type : moduleId) + ":" + text;
  991. if (this.par) text = text+"."+this.par;
  992. return text;
  993. },
  994. relocation: function(){
  995. if (this.node){
  996. if (this.category) this.category.hide();
  997. this.category = this.getCategory();
  998. this.category.show();
  999. this.text = this.getText();
  1000. this.node.inject(this.category.childrenNode);
  1001. }
  1002. },
  1003. createNode: function(){
  1004. this.category = this.getCategory();
  1005. this.category.show();
  1006. this.text = this.getText();
  1007. this.category.childrenNode.appendHTML("<div class='item'><div class='itemIcon'></div><div class='itemText' title='"+this.text+"'>"+this.text +"</div></div>");
  1008. this.node = this.category.childrenNode.getLast();
  1009. this.node.addEvents({
  1010. "mouseover": function(){this.addClass("item_over");},
  1011. "mouseout": function(){this.removeClass("item_over");},
  1012. "click": function(){ this.selected(); }.bind(this)
  1013. });
  1014. if (this.script.categoryType==="module"){
  1015. this.category.items.push(this);
  1016. }else{
  1017. var category = this.script.moduleCategorys[(this.module.type==="Form" || this.module.type==="Page") ? this.module.type : this.module.id];
  1018. if (!category) category = this.script.createCategory(this.module, this.path, "module");
  1019. category.items.push(this);
  1020. }
  1021. },
  1022. resetText: function(id){
  1023. this.text = this.getText(id);
  1024. if (this.node) this.node.getLast().set({"text": this.text, "title": this.text});
  1025. if (this.scriptPage){
  1026. this.scriptPage.options.title = this.text;
  1027. var title = this.scriptPage.textNode.get("text");
  1028. var text = this.text;
  1029. if (title.substr(0,1)==="*") text = "*"+text;
  1030. this.scriptPage.textNode.set("text", text);
  1031. }
  1032. },
  1033. unselected: function(){
  1034. this.node.removeClass("item_select");
  1035. this.node.getLast().removeClass("itemText_select");
  1036. this.isShow = false;
  1037. this.script.currentItem = null;
  1038. },
  1039. selected: function(){
  1040. if (this.script.currentItem) this.script.currentItem.unselected();
  1041. this.node.addClass("item_select");
  1042. this.node.getLast().addClass("itemText_select");
  1043. this.isShow = true;
  1044. this.script.currentItem = this;
  1045. this.showScript();
  1046. // if (this.module.type==="Form" || this.module.type==="Page"){
  1047. // (this.script.designer.form || this.script.designer.page).selected();
  1048. // }else{
  1049. // var list = (this.script.designer.form || this.script.designer.page).moduleList;
  1050. // var module = null;
  1051. // for (var i=0; i<list.length; i++){
  1052. // if (list[i].json.id===this.module.id){
  1053. // module = list[i];
  1054. // break;
  1055. // }
  1056. // }
  1057. // if (module) module.selected();
  1058. // }
  1059. var module = this.getFormModule();
  1060. if (module) module.selected();
  1061. },
  1062. getFormModule: function(){
  1063. if (this.module.type==="Form" || this.module.type==="Page"){
  1064. return (this.script.designer.form || this.script.designer.page);
  1065. }else{
  1066. var list = (this.script.designer.form || this.script.designer.page).moduleList;
  1067. var module = null;
  1068. for (var i=0; i<list.length; i++){
  1069. if (list[i].json.id===this.module.id){
  1070. module = list[i];
  1071. break;
  1072. }
  1073. }
  1074. return module;
  1075. }
  1076. },
  1077. save: function(){
  1078. this.script.designer.saveForm();
  1079. },
  1080. change: function(){
  1081. var oldValue = Object.clone(this.data);
  1082. this.data[this.key] = this.jsEditor.getValue();
  1083. this.checkHistory(this.path, oldValue );
  1084. },
  1085. checkHistory: function(name, oldValue){
  1086. var form = (this.script.designer.form || this.script.designer.page), module;
  1087. if( form.history ){
  1088. if (this.module.type==="Form" || this.module.type==="Page"){
  1089. module = form;
  1090. }else{
  1091. var moduleNode = form.container.getElement("#"+this.module.id);
  1092. if(moduleNode) module = moduleNode.retrieve("module")
  1093. }
  1094. if(module){
  1095. if( name.indexOf(this.script.designer.lp.events+".") === 0){
  1096. name = "events." + name.replace(this.script.designer.lp.events+".", "");
  1097. }
  1098. var newValue = "";
  1099. switch (typeOf(this.data)) {
  1100. case "object":
  1101. newValue = Object.clone(this.data);
  1102. break;
  1103. case "string":
  1104. newValue = this.data;
  1105. break;
  1106. }
  1107. module.checkPropertyHistory(name, oldValue, newValue, true);
  1108. }
  1109. }
  1110. },
  1111. setSize: function(){
  1112. var size = this.script.scriptTabNode.getComputedSize();
  1113. var tabSize = this.script.scriptTab.tabNodeContainer.getComputedSize();
  1114. var tabMarginTop = this.script.scriptTab.tabNodeContainer.getStyle("margin-top").toFloat();
  1115. var tabMarginBottom = this.script.scriptTab.tabNodeContainer.getStyle("margin-bottom").toFloat();
  1116. var h = size.height-tabSize.totalHeight-tabMarginTop-tabMarginBottom;
  1117. this.scriptPageNode.setStyle("height", ""+h+"px");
  1118. if (this.jsEditor) this.jsEditor.resize();
  1119. },
  1120. createScriptEditor: function(){
  1121. this.scriptPageNode = new Element("div");
  1122. this.setSizeFun = this.setSize.bind(this);
  1123. this.setSizeFun();
  1124. this.script.designer.addEvent("resize", this.setSizeFun);
  1125. var text = this.getText();
  1126. this.scriptPage = this.script.scriptTab.addTab(this.scriptPageNode, text, true);
  1127. this.scriptPage.scriptItem = this;
  1128. this.scriptContentNode = new Element("div.scriptContentNode").inject(this.scriptPageNode);
  1129. this.jsEditor = new MWF.widget.JavascriptEditor(this.scriptContentNode,{
  1130. "option": {
  1131. "value": this.data[this.key],
  1132. "lineNumbers": true,
  1133. "mode": this.mode || "javascript"
  1134. },
  1135. "onPostLoad": function(){
  1136. this.editor = this.jsEditor.editor;
  1137. this.editor.id = "1";
  1138. this.jsEditor.addEditorEvent("change", function() {
  1139. if( this.jsEditor.silent )return;
  1140. var text = this.scriptPage.textNode.get("text");
  1141. if (text.substr(0,1)!=="*") this.scriptPage.textNode.set("text","*"+ text);
  1142. this.change();
  1143. }.bind(this));
  1144. this.jsEditor.addEditorEvent("blur", function() {
  1145. this.change();
  1146. }.bind(this));
  1147. // this.editor.on("change", function() {
  1148. // var text = this.scriptPage.textNode.get("text");
  1149. // if (text.substr(0,1)!=="*") this.scriptPage.textNode.set("text","*"+ text);
  1150. // this.change();
  1151. // }.bind(this));
  1152. this.jsEditor.resize();
  1153. }.bind(this),
  1154. "onSave": function(){
  1155. this.save();
  1156. var text = this.scriptPage.textNode.get("text");
  1157. if (text.substr(0,1)==="*"){
  1158. this.scriptPage.textNode.set("text", text.substr(1, text.length));
  1159. }
  1160. }.bind(this)
  1161. });
  1162. this.jsEditor.load();
  1163. this.scriptPage.addEvent("show", function(){
  1164. this.scriptPage.scriptItem.selected();
  1165. if (this.jsEditor) this.jsEditor.focus();
  1166. }.bind(this));
  1167. this.scriptPage.addEvent("queryClose", function(){
  1168. var idx = this.tab.pages.indexOf(this);
  1169. if (idx!==-1){
  1170. if (idx===0){ idx = 1; }else{ idx--; }
  1171. if (this.tab.pages[idx]){ this.tab.pages[idx].scriptItem.selected();} else {this.scriptItem.unselected();}
  1172. }else{
  1173. this.scriptItem.unselected();
  1174. }
  1175. this.scriptItem.scriptPage = null;
  1176. this.scriptItem.jsEditor = null;
  1177. });
  1178. var module = this.getFormModule();
  1179. if(module){
  1180. var name = this.path;
  1181. if( name.indexOf(this.script.designer.lp.events+".") === 0){
  1182. name = "events." + name.replace(this.script.designer.lp.events+".", "");
  1183. }
  1184. module.addScriptJsEditor( name, this.jsEditor );
  1185. }
  1186. //this.scriptPage.tabNode.addEvent("dblclick")
  1187. },
  1188. showScript: function(){
  1189. if (!this.scriptPage) this.createScriptEditor();
  1190. this.scriptPage.showTabIm();
  1191. // if (!this.script.jsEditor){
  1192. // this.script.createScriptEditor(function(){
  1193. // this.script.editor.setValue(this.value);
  1194. // this.script.jsEditor.node.show();
  1195. // }.bind(this));
  1196. // }else{
  1197. // if (this.script.currentItem) this.script.currentItem.unShow();
  1198. // this.script.editor.setValue(this.value);
  1199. // this.script.jsEditor.node.show();
  1200. // }
  1201. },
  1202. destroy: function(){
  1203. this.script.items.erase(this);
  1204. if (this.data.editors) this.data.editors.erase(this);
  1205. var category = this.script.moduleCategorys[(this.module.type==="Form" || this.module.type==="Page") ? this.module.type : this.module.id];
  1206. if (category) category.items.erase(this);
  1207. if (this.scriptPage) this.scriptPage.closeTab();
  1208. if (this.node) this.node.destroy();
  1209. this.script.checkCategorys();
  1210. MWF.release(this);
  1211. },
  1212. //绑定aec需要修改ace源码。
  1213. bind: function(){
  1214. this.value = this.data[this.key];
  1215. if (this.data.editors){
  1216. this.data.editors.push(this);
  1217. }else{
  1218. Object.defineProperty(this.data, "editors", {
  1219. configurable : false,
  1220. enumerable : false,
  1221. writable: true,
  1222. "value": []
  1223. });
  1224. this.data.editors.push(this);
  1225. Object.defineProperty(this.data, this.key, {
  1226. configurable : true,
  1227. enumerable : true,
  1228. "get": function(){return this.value;}.bind(this),
  1229. "set": function(v){
  1230. this.data.editors.each(function(editor){
  1231. if (editor.editor){
  1232. if (v!==editor.editor.getValue()) editor.editor.setValue(v,1);
  1233. }else{
  1234. editor.reload();
  1235. }
  1236. });
  1237. this.value = v;
  1238. }.bind(this)
  1239. });
  1240. }
  1241. // Object.defineProperty(this.data, this.key, {
  1242. // configurable : true,
  1243. // enumerable : true,
  1244. // "get": function(){return this.value;}.bind(this),
  1245. // "set": function(v){
  1246. // this.value = v;
  1247. // this.reload();
  1248. // }.bind(this)
  1249. // });
  1250. }
  1251. });