Table$Td.js 21 KB

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