Table$Td.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853
  1. MWF.xApplication.process.FormDesigner.Module = MWF.xApplication.process.FormDesigner.Module || {};
  2. MWF.xDesktop.requireApp("process.FormDesigner", "Module.$Container", null, false);
  3. MWF.xApplication.process.FormDesigner.Module.Table$Td = MWF.FCTable$Td = new Class({
  4. Extends: MWF.FC$Container,
  5. Implements: [Options, Events],
  6. options: {
  7. "style": "default",
  8. "propertyPath": "/x_component_process_FormDesigner/Module/Table$Td/table$td.html",
  9. "actions": [
  10. {
  11. "name": "insertRow",
  12. "icon": "insertRow1.png",
  13. "event": "click",
  14. "action": "insertRow",
  15. "title": MWF.APPFD.LP.formAction.insertRow
  16. },
  17. {
  18. "name": "insertCol",
  19. "icon": "insertCol1.png",
  20. "event": "click",
  21. "action": "insertCol",
  22. "title": MWF.APPFD.LP.formAction.insertCol
  23. },
  24. {
  25. "name": "deleteRow",
  26. "icon": "deleteRow1.png",
  27. "event": "click",
  28. "action": "deleteRow",
  29. "title": MWF.APPFD.LP.formAction.deleteRow
  30. },
  31. {
  32. "name": "deleteCol",
  33. "icon": "deleteCol1.png",
  34. "event": "click",
  35. "action": "deleteCol",
  36. "title": MWF.APPFD.LP.formAction.deleteCol
  37. },
  38. {
  39. "name": "splitCell",
  40. "icon": "splitCell.png",
  41. "event": "click",
  42. "action": "splitCell",
  43. "title": MWF.APPFD.LP.formAction.splitCell
  44. }
  45. ]
  46. },
  47. initialize: function(form, options){
  48. this.setOptions(options);
  49. this.path = "/x_component_process_FormDesigner/Module/Table$Td/";
  50. this.cssPath = "/x_component_process_FormDesigner/Module/Table$Td/"+this.options.style+"/css.wcss";
  51. this._loadCss();
  52. this.moduleType = "container";
  53. this.moduleName = "table$Td";
  54. this.Node = null;
  55. this.form = form;
  56. },
  57. setAllStyles: function(){
  58. Object.each(this.json.styles, function(value, key){
  59. var reg = /^border\w*/ig;
  60. if (!key.test(reg)){
  61. if (key) this.node.setStyle(key, value);
  62. }
  63. }.bind(this));
  64. this.setPropertiesOrStyles("properties");
  65. this.reloadMaplist();
  66. },
  67. over: function(){
  68. if (this.form.selectedModules.indexOf(this)==-1){
  69. if (!this.form.moveModule) if (this.form.currentSelectedModule!=this) this.node.setStyles({
  70. "border-width": "1px",
  71. "border-color": "#0072ff"
  72. });
  73. }
  74. },
  75. unOver: function(){
  76. if (this.form.selectedModules.indexOf(this)==-1){
  77. if (!this.form.moveModule) if (this.form.currentSelectedModule!=this) this.node.setStyles({
  78. "border-width": "1px",
  79. "border-color": "#999"
  80. });
  81. }
  82. },
  83. unSelected: function(){
  84. this.node.setStyles({
  85. "border-width": "1px",
  86. "border-color": "#999"
  87. });
  88. this._hideActions();
  89. this.form.currentSelectedModule = null;
  90. this.hideProperty();
  91. },
  92. _showActions: function(){
  93. if (this.actionArea){
  94. this._setActionAreaPosition();
  95. this.actionArea.setStyle("display", "block");
  96. var colspan = this.node.get("colspan").toInt() || 1;
  97. var rowspan = this.node.get("rowspan").toInt() || 1;
  98. if (colspan<=1 && rowspan<=1){
  99. this.actionArea.getLast("div").setStyle("display", "none");
  100. }
  101. }
  102. },
  103. unSelectedMulti: function(){
  104. if (this.form.selectedModules.indexOf(this)!=-1){
  105. this.form.selectedModules.erase(this);
  106. this.node.setStyle("border-color", "#999");
  107. }
  108. },
  109. load : function(json, node, parent){
  110. this.json = json;
  111. this.node= node;
  112. this.node.store("module", this);
  113. this.node.setStyles(this.css.moduleNode);
  114. if (!this.json.id){
  115. var id = this._getNewId(parent.json.id);
  116. this.json.id = id;
  117. }
  118. node.set({
  119. "MWFType": "table$Td",
  120. "id": this.json.id
  121. });
  122. if (!this.form.json.moduleList[this.json.id]){
  123. this.form.json.moduleList[this.json.id] = this.json;
  124. }
  125. this._initModule();
  126. this._loadTreeNode(parent);
  127. this.form.parseModules(this, this.node);
  128. this.parentContainer = this.treeNode.parentNode.module;
  129. this._setEditStyle_custom("id");
  130. this.json.moduleName = this.moduleName;
  131. },
  132. // _setNodeEvent: function(){
  133. // if (!this.isSetEvents){
  134. // this.node.addEvent("click", function(e){
  135. // this.selected();
  136. // e.stop();
  137. // }.bind(this));
  138. //
  139. // this.node.addEvent("mouseover", function(e){
  140. // this.over();
  141. // e.stop();
  142. // }.bind(this));
  143. // this.node.addEvent("mouseout", function(e){
  144. // this.unOver();
  145. // e.stop();
  146. // }.bind(this));
  147. //
  148. // this._setOtherNodeEvent();cellType
  149. // },
  150. _createMoveNode: function(){
  151. return false;
  152. },
  153. _setEditStyle_custom: function(name){
  154. if (name=="cellType"){
  155. this.setCustomStyles();
  156. }
  157. },
  158. setCustomStyles: function(){
  159. var border = this.node.getStyle("border");
  160. this.node.clearStyles();
  161. this.node.setStyles(this.css.moduleNode);
  162. var addStyles = {};
  163. if (this.json.cellType=="title"){
  164. addStyles = this.table.json.titleTdStyles
  165. }
  166. if (this.json.cellType=="content"){
  167. addStyles = this.table.json.contentTdStyles
  168. }
  169. if (this.json.cellType=="layout"){
  170. addStyles = this.table.json.layoutTdStyles
  171. }
  172. if (this.initialStyles) this.node.setStyles(this.initialStyles);
  173. this.node.setStyle("border", border);
  174. Object.each(addStyles, function(value, key){
  175. var reg = /^border\w*/ig;
  176. if (!key.test(reg)){
  177. this.node.setStyle(key, value);
  178. }
  179. }.bind(this));
  180. Object.each(this.json.styles, function(value, key){
  181. var reg = /^border\w*/ig;
  182. if (!key.test(reg)){
  183. this.node.setStyle(key, value);
  184. }
  185. }.bind(this));
  186. },
  187. _dragInLikeElement: function(module){
  188. return false;
  189. },
  190. insertRow: function(){
  191. var module = this;
  192. var url = this.path+"insertRow.html";
  193. MWF.require("MWF.widget.Dialog", function(){
  194. var size = $(document.body).getSize();
  195. var x = size.x/2-150;
  196. var y = size.y/2-90;
  197. var dlg = new MWF.DL({
  198. "title": "Insert Row",
  199. "style": "property",
  200. "top": y,
  201. "left": x-40,
  202. "fromTop":size.y/2-45,
  203. "fromLeft": size.x/2,
  204. "width": 300,
  205. "height": 180,
  206. "url": url,
  207. "buttonList": [
  208. {
  209. "text": MWF.APPFD.LP.button.ok,
  210. "action": function(){
  211. module._insertRow();
  212. this.close();
  213. }
  214. },
  215. {
  216. "text": MWF.APPFD.LP.button.cancel,
  217. "action": function(){
  218. this.close();
  219. }
  220. }
  221. ]
  222. });
  223. dlg.show();
  224. }.bind(this));
  225. },
  226. _insertRow: function(){
  227. var rows = $("MWFInsertRowNumber").get("value");
  228. var positionRadios = document.getElementsByName("MWFInsertRowPosition");
  229. var position = "before";
  230. for (var i=0; i<positionRadios.length; i++){
  231. if (positionRadios[i].checked){
  232. position = positionRadios[i].value;
  233. break;
  234. }
  235. }
  236. var tr = this.node.getParent("tr");
  237. var table = tr.getParent("table");
  238. var cellNumber = tr.cells.length;
  239. var rowIndex = tr.rowIndex;
  240. var rowspanBeforeTds = table.getElements("td:rowspanBefore("+rowIndex+")");
  241. var colCurrentTds = tr.getElements("td:colspan");
  242. colCurrentTds.each(function(td){
  243. var colspan = td.get("colspan").toInt() || 1;
  244. cellNumber = cellNumber+colspan-1;
  245. });
  246. rowspanBeforeTds.each(function(td){
  247. this.__rowspanPlus(td, rows);
  248. }.bind(this));
  249. if (position=="after"){
  250. var rowspanCurrentTds = tr.getElements("td:rowspan");
  251. rowspanCurrentTds.each(function(td){
  252. this.__rowspanPlus(td, rows);
  253. var colspan = td.get("colspan").toInt() || 1;
  254. cellNumber = cellNumber-colspan;
  255. }.bind(this));
  256. }
  257. for (var n=1; n<=rows; n++){
  258. var newTr = new Element("tr").inject(tr, position);
  259. for (var m=1; m<=cellNumber; m++){
  260. var cell = new Element("td").inject(newTr);
  261. this.form.getTemplateData("Table$Td", function(data){
  262. var moduleData = Object.clone(data);
  263. var tdContainer = new MWF.FCTable$Td(this.form);
  264. tdContainer.table = this.table;
  265. tdContainer.load(moduleData, cell, this.parentContainer);
  266. this.parentContainer.containers.push(tdContainer);
  267. }.bind(this));
  268. }
  269. }
  270. this.unSelected();
  271. this.selected();
  272. },
  273. insertCol: function(){
  274. var module = this;
  275. var url = this.path+"insertCol.html";
  276. MWF.require("MWF.widget.Dialog", function(){
  277. var size = $(document.body).getSize();
  278. var x = size.x/2-150;
  279. var y = size.y/2-90;
  280. var dlg = new MWF.DL({
  281. "title": "Insert Col",
  282. "style": "property",
  283. "top": y,
  284. "left": x-40,
  285. "fromTop":size.y/2-45,
  286. "fromLeft": size.x/2,
  287. "width": 300,
  288. "height": 180,
  289. "url": url,
  290. "buttonList": [
  291. {
  292. "text": MWF.APPFD.LP.button.ok,
  293. "action": function(){
  294. module._insertCol();
  295. this.close();
  296. }
  297. },
  298. {
  299. "text": MWF.APPFD.LP.button.cancel,
  300. "action": function(){
  301. this.close();
  302. }
  303. }
  304. ]
  305. });
  306. dlg.show();
  307. }.bind(this));
  308. },
  309. _insertCol: function(){
  310. var cols = $("MWFInsertColNumber").get("value");
  311. var positionRadios = document.getElementsByName("MWFInsertColPosition");
  312. var position = "before";
  313. for (var i=0; i<positionRadios.length; i++){
  314. if (positionRadios[i].checked){
  315. position = positionRadios[i].value;
  316. break;
  317. }
  318. }
  319. var tr = this.node.getParent("tr");
  320. var table = tr.getParent("table");
  321. var colIndex = this.__getCellIndex(this.node);
  322. for (var m=1; m<=cols; m++){
  323. var insertTdObjs = this.__getInsertTableColTds(table, colIndex);
  324. insertTdObjs.each(function(obj){
  325. obj.td.inject(obj.toTd, position);
  326. this.form.getTemplateData("Table$Td", function(data){
  327. var moduleData = Object.clone(data);
  328. var tdContainer = new MWF.FCTable$Td(this.form);
  329. tdContainer.table = this.table;
  330. tdContainer.load(moduleData, obj.td, this.parentContainer);
  331. this.parentContainer.containers.push(tdContainer);
  332. }.bind(this));
  333. }.bind(this));
  334. }
  335. this.unSelected();
  336. this.selected();
  337. },
  338. deleteRow: function(e){
  339. var module = this;
  340. this.form.designer.confirm("warn", e, MWF.APPFD.LP.notice.deleteRowTitle, MWF.APPFD.LP.notice.deleteRow, 300, 120, function(){
  341. module._deleteRow();
  342. this.close();
  343. }, function(){
  344. this.close();
  345. }, null);
  346. },
  347. __rowspanPlus: function(td,n){
  348. var rowspan = td.get("rowspan").toInt() || 1;
  349. rowspan = rowspan+n.toInt();
  350. var module = td.retrieve("module");
  351. if (rowspan>1){
  352. td.set("rowspan", rowspan);
  353. if (module) module.json.properties.rowspan = rowspan;
  354. }else{
  355. td.set("rowspan", 1);
  356. delete td.rowspan;
  357. if (module) delete module.json.properties.rowspan;
  358. }
  359. },
  360. __rowspanMinus: function(td){
  361. var rowspan = td.get("rowspan").toInt() || 1;
  362. rowspan = rowspan-1;
  363. var module = td.retrieve("module");
  364. if (rowspan>1){
  365. td.set("rowspan", rowspan);
  366. if (module) module.json.properties.rowspan = rowspan;
  367. }else{
  368. td.set("rowspan", 1);
  369. delete td.rowspan;
  370. if (module) delete module.json.properties.rowspan;
  371. }
  372. },
  373. __colspanPlus: function(td, n){
  374. var colspan = td.get("colspan").toInt() || 1;
  375. colspan = colspan+n.toInt();
  376. var module = td.retrieve("module");
  377. if (colspan>1){
  378. td.set("colspan", colspan);
  379. if (module) module.json.properties.colspan = colspan;
  380. }else{
  381. td.set("colspan", 1);
  382. delete td.colspan;
  383. if (module) delete module.json.properties.colspan;
  384. }
  385. },
  386. __colspanMinus: function(td){
  387. var colspan = td.get("colspan").toInt() || 1;
  388. colspan = colspan-1;
  389. var module = td.retrieve("module");
  390. if (colspan>1){
  391. td.set("colspan", colspan);
  392. if (module) module.json.properties.colspan = colspan;
  393. }else{
  394. td.set("colspan", 1);
  395. delete td.colspan;
  396. if (module) delete module.json.properties.colspan;
  397. }
  398. },
  399. __getNextTd: function(nextTr, cellIndex){
  400. var nextTd = null;
  401. while (cellIndex>0){
  402. if (!nextTd){
  403. nextTd = nextTr.getFirst("td");
  404. }else{
  405. nextTd = nextTd.getNext("td");
  406. }
  407. cellIndex--;
  408. var colspan = nextTd.get("colspan").toInt() || 1;
  409. cellIndex = cellIndex-colspan-1;
  410. }
  411. return nextTd;
  412. },
  413. __getCellIndex: function(td){
  414. var tr = td.getParent("tr");
  415. var table = tr.getParent("table");
  416. // var rowindex = tr.rowIndex;
  417. var idx = -1;
  418. var trs = table.rows;
  419. var rowspanTds = {};
  420. var isBreak = false;
  421. for (var i=0; i<trs.length; i++){
  422. var ervryTd = null;
  423. var j=0;
  424. while (true){
  425. var rowspan = rowspanTds["rowspan_"+j];
  426. if (rowspan){
  427. rowspan.rows = rowspan.rows-1;
  428. if (!rowspan.rows){
  429. delete rowspanTds["rowspan_"+j];
  430. }
  431. j++;
  432. }else{
  433. if (!ervryTd){
  434. ervryTd = trs[i].getFirst("td");
  435. }else{
  436. ervryTd = ervryTd.getNext("td");
  437. }
  438. if (!ervryTd) break;
  439. if (ervryTd==td){
  440. idx = j;
  441. isBreak = true;
  442. break;
  443. }else{
  444. var rowspan = ervryTd.get("rowspan").toInt() || 1;
  445. var colspan = ervryTd.get("colspan").toInt() || 1;
  446. if (rowspan>1){
  447. var rows = rowspan-1;
  448. for (var x=0; x<colspan; x++){
  449. var n = j+x;
  450. rowspanTds["rowspan_"+n] = {"rows": rows};
  451. }
  452. }
  453. j = j + colspan-1;
  454. }
  455. j++;
  456. }
  457. }
  458. if (isBreak) break;
  459. }
  460. return idx;
  461. },
  462. __getInsertTableColTds: function(table, idx){
  463. var insertTds = [];
  464. var trs = table.rows;
  465. var rowspanTds = {};
  466. for (var i=0; i<trs.length; i++){
  467. var ervryTd = null;
  468. var j=0;
  469. while (true){
  470. var rowspan = rowspanTds["rowspan_"+j];
  471. if (rowspan){
  472. rowspan.rows = rowspan.rows-1;
  473. if (!rowspan.rows){
  474. delete rowspanTds["rowspan_"+j];
  475. }
  476. j++;
  477. }else{
  478. if (!ervryTd){
  479. ervryTd = trs[i].getFirst("td");
  480. }else{
  481. ervryTd = ervryTd.getNext("td");
  482. }
  483. if (!ervryTd) break;
  484. var rowspan = ervryTd.get("rowspan").toInt() || 1;
  485. var colspan = ervryTd.get("colspan").toInt() || 1;
  486. if (rowspan>1){
  487. var rows = rowspan-1;
  488. for (var x=0; x<colspan; x++){
  489. var n = j+x;
  490. rowspanTds["rowspan_"+n] = {"rows": rows};
  491. }
  492. }
  493. if (colspan>1){
  494. if (j + colspan-1>=idx && j<=idx){
  495. // ervryTd.setStyle("background", "#FF9999");
  496. this.__colspanPlus(ervryTd, 1);
  497. break;
  498. }
  499. }else{
  500. if (j==idx){
  501. var newTd = new Element("td");
  502. insertTds.push({"td": newTd, "toTd": ervryTd});
  503. break;
  504. }
  505. }
  506. j = j + colspan-1;
  507. j++;
  508. }
  509. }
  510. }
  511. return insertTds;
  512. },
  513. __getDeleteTableColTds: function(table, idx){
  514. var deleteTds = [];
  515. var trs = table.rows;
  516. var rowspanTds = {};
  517. for (var i=0; i<trs.length; i++){
  518. var ervryTd = null;
  519. var j=0;
  520. while (true){
  521. var rowspan = rowspanTds["rowspan_"+j];
  522. if (rowspan){
  523. rowspan.rows = rowspan.rows-1;
  524. if (!rowspan.rows){
  525. delete rowspanTds["rowspan_"+j];
  526. }
  527. j++;
  528. }else{
  529. if (!ervryTd){
  530. ervryTd = trs[i].getFirst("td");
  531. }else{
  532. ervryTd = ervryTd.getNext("td");
  533. }
  534. if (!ervryTd) break;
  535. var rowspan = ervryTd.get("rowspan").toInt() || 1;
  536. var colspan = ervryTd.get("colspan").toInt() || 1;
  537. if (rowspan>1){
  538. var rows = rowspan-1;
  539. for (var x=0; x<colspan; x++){
  540. var n = j+x;
  541. rowspanTds["rowspan_"+n] = {"rows": rows};
  542. }
  543. }
  544. if (colspan>1){
  545. if (j + colspan-1>=idx && j<=idx){
  546. // ervryTd.setStyle("background", "#FF9999");
  547. this.__colspanMinus(ervryTd);
  548. break;
  549. }
  550. }else{
  551. if (j==idx){
  552. deleteTds.push(ervryTd);
  553. break;
  554. }
  555. }
  556. j = j + colspan-1;
  557. j++;
  558. }
  559. }
  560. }
  561. return deleteTds;
  562. },
  563. _deleteRow:function(){
  564. var tr = this.node.getParent("tr");
  565. var table = tr.getParent("table");
  566. var rowIndex = tr.rowIndex;
  567. // var currentRowspan = this.node.get("rowspan").toInt() || 1;
  568. var rowspanBeforeTds = table.getElements("td:rowspanBefore("+rowIndex+")");
  569. var rowspanCurrentTds = tr.getElements("td:rowspan");
  570. rowspanBeforeTds.each(function(td){
  571. this.__rowspanMinus(td);
  572. }.bind(this));
  573. rowspanCurrentTds.each(function(td){
  574. this.__rowspanMinus(td);
  575. var nextTr = table.rows[rowIndex+1];
  576. if (nextTr){
  577. var cellIndex = td.cellIndex;
  578. var nextTd = null;
  579. if (cellIndex>0){
  580. nextTd = this.__getNextTd(nextTr, cellIndex);
  581. }else{
  582. nextTd = this.__getNextTd(nextTr, 2);
  583. }
  584. if (nextTd) td.inject(nextTd, "after");
  585. }
  586. }.bind(this));
  587. if (table.rows.length<=1){
  588. this.parentContainer.destroy();
  589. }else{
  590. tds = tr.getElements("td");
  591. tds.each(function(td){
  592. var module = td.retrieve("module");
  593. if (module){
  594. module.parentContainer.containers.erase(module);
  595. module.destroy();
  596. }
  597. });
  598. tr.destroy();
  599. }
  600. this.form.selected();
  601. },
  602. deleteCol: function(e){
  603. var module = this;
  604. this.form.designer.confirm("warn", e, MWF.APPFD.LP.notice.deleteColTitle, MWF.APPFD.LP.notice.deleteCol, 300, 120, function(){
  605. module._deleteCol();
  606. this.close();
  607. }, function(){
  608. this.close();
  609. }, null);
  610. },
  611. _deleteCol: function(){
  612. var tr = this.node.getParent("tr");
  613. var table = tr.getParent("table");
  614. var colIndex = this.__getCellIndex(this.node);
  615. var currentRowspan = this.node.get("colspan").toInt() || 1;
  616. if (tr.cells.length<=1 && currentRowspan<=1){
  617. this.parentContainer.destroy();
  618. }else{
  619. var deleteTds = this.__getDeleteTableColTds(table, colIndex);
  620. deleteTds.each(function(dtd){
  621. // dtd.setStyle("background", "#999999");
  622. var module = dtd.retrieve("module");
  623. if (module){
  624. module.parentContainer.containers.erase(module);
  625. module.destroy();
  626. }
  627. });
  628. }
  629. },
  630. // __getTdByIndex11: function(tr, idx){
  631. // //??????????????????????????????????????
  632. // //??????????????????????????????????????
  633. // //??????????????????????????????????????
  634. // //??????????????????????????????????????
  635. // //??????????????????????????????????????
  636. // var findTd = false;
  637. // var td = null;
  638. // var n=-1;
  639. // while (n!=idx){
  640. // if (!td){
  641. // td = tr.getFirst("td");
  642. // }else{
  643. // td = tr.getNext("td");
  644. // }
  645. // var colspan = td.get("colspan").toInt() || 1;
  646. // n = n+colspan;
  647. // if (n>=idx && n-colspan<=idx) n=idx;
  648. // }
  649. // return td;
  650. // },
  651. __getTdsByIndex: function(table, beginRow, rows, idx){
  652. var indexTds = [];
  653. var trs = table.rows;
  654. var rowspanTds = {};
  655. for (var i=0; i<trs.length; i++){
  656. var ervryTd = null;
  657. var j=0;
  658. var findTd=false;
  659. while (true){
  660. var rowspan = rowspanTds["rowspan_"+j];
  661. if (rowspan){
  662. rowspan.rows = rowspan.rows-1;
  663. if (!rowspan.rows){
  664. delete rowspanTds["rowspan_"+j];
  665. }
  666. j++;
  667. }else{
  668. if (!ervryTd){
  669. ervryTd = trs[i].getFirst("td");
  670. }else{
  671. ervryTd = ervryTd.getNext("td");
  672. }
  673. if (!ervryTd){
  674. if (i>=beginRow && i<=beginRow+rows) if (!findTd) indexTds.push(null);
  675. break;
  676. }
  677. var rowspan = ervryTd.get("rowspan").toInt() || 1;
  678. var colspan = ervryTd.get("colspan").toInt() || 1;
  679. var rows;
  680. if (rowspan>1){
  681. rows = rowspan-1;
  682. for (var x=0; x<colspan; x++){
  683. var n = j+x;
  684. rowspanTds["rowspan_"+n] = {"rows": rows};
  685. }
  686. }
  687. if (j + colspan-1>=idx && j<=idx){
  688. if (i>=beginRow && i<=beginRow+rows){
  689. indexTds.push(ervryTd);
  690. findTd = true;
  691. }
  692. break;
  693. }
  694. j = j + colspan-1;
  695. j++;
  696. }
  697. }
  698. }
  699. return indexTds;
  700. },
  701. splitCell: function(){
  702. var colspan = this.node.get("colspan").toInt() || 1;
  703. var rowspan = this.node.get("rowspan").toInt() || 1;
  704. var tr = this.node.getParent("tr");
  705. var table = tr.getParent("table");
  706. var rowIndex = tr.rowIndex;
  707. var colIndex = this.__getCellIndex(this.node);
  708. this.node.set("rowspan", 1);
  709. delete this.node.rowspan;
  710. delete this.json.properties.rowspan;
  711. this.node.set("colspan", 1);
  712. delete this.node.colspan;
  713. delete this.json.properties.colspan;
  714. if (this.form.currentSelectedModule) this.form.currentSelectedModule.unSelected();
  715. this.unSelectedMulti();
  716. this.selectedMulti();
  717. var startTds = this.__getTdsByIndex(table, rowIndex+1, rowspan-1, colIndex-1);
  718. for (var i=1; i<=rowspan; i++){
  719. if (i==1){
  720. for (var j=2; j<=colspan; j++){
  721. var newTd = new Element("td").inject(this.node, "after");
  722. this.form.getTemplateData("Table$Td", function(data){
  723. var moduleData = Object.clone(data);
  724. var tdContainer = new MWF.FCTable$Td(this.form);
  725. tdContainer.table = this.table;
  726. tdContainer.load(moduleData, newTd, this.parentContainer);
  727. this.parentContainer.containers.push(tdContainer);
  728. tdContainer.selectedMulti();
  729. }.bind(this));
  730. }
  731. }else{
  732. var tr = tr.getNext("tr");
  733. var startTd = startTds[i-2];
  734. for (var j=1; j<=colspan; j++){
  735. var newTd = new Element("td");
  736. if (startTd){
  737. newTd.inject(startTd, "after");
  738. }else{
  739. newTd.inject(tr, "top");
  740. }
  741. this.form.getTemplateData("Table$Td", function(data){
  742. var moduleData = Object.clone(data);
  743. var tdContainer = new MWF.FCTable$Td(this.form);
  744. tdContainer.table = this.table;
  745. tdContainer.load(moduleData, newTd, this.parentContainer);
  746. this.parentContainer.containers.push(tdContainer);
  747. tdContainer.selectedMulti();
  748. }.bind(this));
  749. }
  750. }
  751. }
  752. this.form._completeSelectMulti();
  753. }
  754. });