BVB Source Codes

Project management software KisProject v1.0.3 Show table.js Source code

Return Download Project management software KisProject v1.0.3: download table.js Source code - Download Project management software KisProject v1.0.3 Source code - Type:.js
  1. /*******************************************************************************
  2. * KindEditor - WYSIWYG HTML Editor for Internet
  3. * Copyright (C) 2006-2011 kindsoft.net
  4. *
  5. * @author Roddy <luolonghao@gmail.com>
  6. * @site http://www.kindsoft.net/
  7. * @licence http://www.kindsoft.net/license.php
  8. *******************************************************************************/
  9.  
  10. KindEditor.plugin('table', function(K) {
  11.         var self = this, name = 'table', lang = self.lang(name + '.'), zeroborder = 'ke-zeroborder';
  12.         // 取得下一行cell的index
  13.         function _getCellIndex(table, row, cell) {
  14.                 var rowSpanCount = 0;
  15.                 for (var i = 0, len = row.cells.length; i < len; i++) {
  16.                         if (row.cells[i] == cell) {
  17.                                 break;
  18.                         }
  19.                         rowSpanCount += row.cells[i].rowSpan - 1;
  20.                 }
  21.                 return cell.cellIndex - rowSpanCount;
  22.         }
  23.         self.plugin.table = {
  24.                 //insert or modify table
  25.                 prop : function(isInsert) {
  26.                         var html = [
  27.                                 '<div style="padding:10px 20px;">',
  28.                                 //rows, cols
  29.                                 '<div class="ke-dialog-row">',
  30.                                 '<label for="keRows" style="width:90px;">' + lang.cells + '</label>',
  31.                                 lang.rows + ' <input type="text" id="keRows" class="ke-input-text ke-input-number" name="rows" value="" maxlength="4" /> &nbsp; ',
  32.                                 lang.cols + ' <input type="text" class="ke-input-text ke-input-number" name="cols" value="" maxlength="4" />',
  33.                                 '</div>',
  34.                                 //width, height
  35.                                 '<div class="ke-dialog-row">',
  36.                                 '<label for="keWidth" style="width:90px;">' + lang.size + '</label>',
  37.                                 lang.width + ' <input type="text" id="keWidth" class="ke-input-text ke-input-number" name="width" value="" maxlength="4" /> &nbsp; ',
  38.                                 '<select name="widthType">',
  39.                                 '<option value="%">' + lang.percent + '</option>',
  40.                                 '<option value="px">' + lang.px + '</option>',
  41.                                 '</select> &nbsp; ',
  42.                                 lang.height + ' <input type="text" class="ke-input-text ke-input-number" name="height" value="" maxlength="4" /> &nbsp; ',
  43.                                 '<select name="heightType">',
  44.                                 '<option value="%">' + lang.percent + '</option>',
  45.                                 '<option value="px">' + lang.px + '</option>',
  46.                                 '</select>',
  47.                                 '</div>',
  48.                                 //space, padding
  49.                                 '<div class="ke-dialog-row">',
  50.                                 '<label for="kePadding" style="width:90px;">' + lang.space + '</label>',
  51.                                 lang.padding + ' <input type="text" id="kePadding" class="ke-input-text ke-input-number" name="padding" value="" maxlength="4" /> &nbsp; ',
  52.                                 lang.spacing + ' <input type="text" class="ke-input-text ke-input-number" name="spacing" value="" maxlength="4" />',
  53.                                 '</div>',
  54.                                 //align
  55.                                 '<div class="ke-dialog-row">',
  56.                                 '<label for="keAlign" style="width:90px;">' + lang.align + '</label>',
  57.                                 '<select id="keAlign" name="align">',
  58.                                 '<option value="">' + lang.alignDefault + '</option>',
  59.                                 '<option value="left">' + lang.alignLeft + '</option>',
  60.                                 '<option value="center">' + lang.alignCenter + '</option>',
  61.                                 '<option value="right">' + lang.alignRight + '</option>',
  62.                                 '</select>',
  63.                                 '</div>',
  64.                                 //border
  65.                                 '<div class="ke-dialog-row">',
  66.                                 '<label for="keBorder" style="width:90px;">' + lang.border + '</label>',
  67.                                 lang.borderWidth + ' <input type="text" id="keBorder" class="ke-input-text ke-input-number" name="border" value="" maxlength="4" /> &nbsp; ',
  68.                                 lang.borderColor + ' <span class="ke-inline-block ke-input-color"></span>',
  69.                                 '</div>',
  70.                                 //background color
  71.                                 '<div class="ke-dialog-row">',
  72.                                 '<label for="keBgColor" style="width:90px;">' + lang.backgroundColor + '</label>',
  73.                                 '<span class="ke-inline-block ke-input-color"></span>',
  74.                                 '</div>',
  75.                                 '</div>'
  76.                         ].join('');
  77.                         var picker, currentElement;
  78.                         function removePicker() {
  79.                                 if (picker) {
  80.                                         picker.remove();
  81.                                         picker = null;
  82.                                         currentElement = null;
  83.                                 }
  84.                         }
  85.                         var dialog = self.createDialog({
  86.                                 name : name,
  87.                                 width : 500,
  88.                                 height : 300,
  89.                                 title : self.lang(name),
  90.                                 body : html,
  91.                                 beforeDrag : removePicker,
  92.                                 beforeRemove : function() {
  93.                                         removePicker();
  94.                                         colorBox.unbind();
  95.                                 },
  96.                                 yesBtn : {
  97.                                         name : self.lang('yes'),
  98.                                         click : function(e) {
  99.                                                 var rows = rowsBox.val(),
  100.                                                         cols = colsBox.val(),
  101.                                                         width = widthBox.val(),
  102.                                                         height = heightBox.val(),
  103.                                                         widthType = widthTypeBox.val(),
  104.                                                         heightType = heightTypeBox.val(),
  105.                                                         padding = paddingBox.val(),
  106.                                                         spacing = spacingBox.val(),
  107.                                                         align = alignBox.val(),
  108.                                                         border = borderBox.val(),
  109.                                                         borderColor = K(colorBox[0]).html() || '',
  110.                                                         bgColor = K(colorBox[1]).html() || '';
  111.                                                 if (rows == 0 || !/^\d+$/.test(rows)) {
  112.                                                         alert(self.lang('invalidRows'));
  113.                                                         rowsBox[0].focus();
  114.                                                         return;
  115.                                                 }
  116.                                                 if (cols == 0 || !/^\d+$/.test(cols)) {
  117.                                                         alert(self.lang('invalidRows'));
  118.                                                         colsBox[0].focus();
  119.                                                         return;
  120.                                                 }
  121.                                                 if (!/^\d*$/.test(width)) {
  122.                                                         alert(self.lang('invalidWidth'));
  123.                                                         widthBox[0].focus();
  124.                                                         return;
  125.                                                 }
  126.                                                 if (!/^\d*$/.test(height)) {
  127.                                                         alert(self.lang('invalidHeight'));
  128.                                                         heightBox[0].focus();
  129.                                                         return;
  130.                                                 }
  131.                                                 if (!/^\d*$/.test(padding)) {
  132.                                                         alert(self.lang('invalidPadding'));
  133.                                                         paddingBox[0].focus();
  134.                                                         return;
  135.                                                 }
  136.                                                 if (!/^\d*$/.test(spacing)) {
  137.                                                         alert(self.lang('invalidSpacing'));
  138.                                                         spacingBox[0].focus();
  139.                                                         return;
  140.                                                 }
  141.                                                 if (!/^\d*$/.test(border)) {
  142.                                                         alert(self.lang('invalidBorder'));
  143.                                                         borderBox[0].focus();
  144.                                                         return;
  145.                                                 }
  146.                                                 //modify table
  147.                                                 if (table) {
  148.                                                         if (width !== '') {
  149.                                                                 table.width(width + widthType);
  150.                                                         } else {
  151.                                                                 table.css('width', '');
  152.                                                         }
  153.                                                         if (table[0].width !== undefined) {
  154.                                                                 table.removeAttr('width');
  155.                                                         }
  156.                                                         if (height !== '') {
  157.                                                                 table.height(height + heightType);
  158.                                                         } else {
  159.                                                                 table.css('height', '');
  160.                                                         }
  161.                                                         if (table[0].height !== undefined) {
  162.                                                                 table.removeAttr('height');
  163.                                                         }
  164.                                                         table.css('background-color', bgColor);
  165.                                                         if (table[0].bgColor !== undefined) {
  166.                                                                 table.removeAttr('bgColor');
  167.                                                         }
  168.                                                         if (padding !== '') {
  169.                                                                 table[0].cellPadding = padding;
  170.                                                         } else {
  171.                                                                 table.removeAttr('cellPadding');
  172.                                                         }
  173.                                                         if (spacing !== '') {
  174.                                                                 table[0].cellSpacing = spacing;
  175.                                                         } else {
  176.                                                                 table.removeAttr('cellSpacing');
  177.                                                         }
  178.                                                         if (align !== '') {
  179.                                                                 table[0].align = align;
  180.                                                         } else {
  181.                                                                 table.removeAttr('align');
  182.                                                         }
  183.                                                         if (border !== '') {
  184.                                                                 table.attr('border', border);
  185.                                                         } else {
  186.                                                                 table.removeAttr('border');
  187.                                                         }
  188.                                                         if (border === '' || border === '0') {
  189.                                                                 table.addClass(zeroborder);
  190.                                                         } else {
  191.                                                                 table.removeClass(zeroborder);
  192.                                                         }
  193.                                                         if (borderColor !== '') {
  194.                                                                 table.attr('borderColor', borderColor);
  195.                                                         } else {
  196.                                                                 table.removeAttr('borderColor');
  197.                                                         }
  198.                                                         self.hideDialog().focus();
  199.                                                         return;
  200.                                                 }
  201.                                                 //insert new table
  202.                                                 var style = '';
  203.                                                 if (width !== '') {
  204.                                                         style += 'width:' + width + widthType + ';';
  205.                                                 }
  206.                                                 if (height !== '') {
  207.                                                         style += 'height:' + height + heightType + ';';
  208.                                                 }
  209.                                                 if (bgColor !== '') {
  210.                                                         style += 'background-color:' + bgColor + ';';
  211.                                                 }
  212.                                                 var html = '<table';
  213.                                                 if (style !== '') {
  214.                                                         html += ' style="' + style + '"';
  215.                                                 }
  216.                                                 if (padding !== '') {
  217.                                                         html += ' cellpadding="' + padding + '"';
  218.                                                 }
  219.                                                 if (spacing !== '') {
  220.                                                         html += ' cellspacing="' + spacing + '"';
  221.                                                 }
  222.                                                 if (align !== '') {
  223.                                                         html += ' align="' + align + '"';
  224.                                                 }
  225.                                                 if (border !== '') {
  226.                                                         html += ' border="' + border + '"';
  227.                                                 }
  228.                                                 if (border === '' || border === '0') {
  229.                                                         html += ' class="' + zeroborder + '"';
  230.                                                 }
  231.                                                 if (borderColor !== '') {
  232.                                                         html += ' bordercolor="' + borderColor + '"';
  233.                                                 }
  234.                                                 html += '>';
  235.                                                 for (var i = 0; i < rows; i++) {
  236.                                                         html += '<tr>';
  237.                                                         for (var j = 0; j < cols; j++) {
  238.                                                                 html += '<td>' + (K.IE ? '&nbsp;' : '<br />') + '</td>';
  239.                                                         }
  240.                                                         html += '</tr>';
  241.                                                 }
  242.                                                 html += '</table>';
  243.                                                 if (!K.IE) {
  244.                                                         html += '<br />';
  245.                                                 }
  246.                                                 self.insertHtml(html);
  247.                                                 self.select().hideDialog().focus();
  248.                                                 self.addBookmark();
  249.                                         }
  250.                                 }
  251.                         }),
  252.                         div = dialog.div,
  253.                         rowsBox = K('[name="rows"]', div).val(3),
  254.                         colsBox = K('[name="cols"]', div).val(2),
  255.                         widthBox = K('[name="width"]', div).val(100),
  256.                         heightBox = K('[name="height"]', div),
  257.                         widthTypeBox = K('[name="widthType"]', div),
  258.                         heightTypeBox = K('[name="heightType"]', div),
  259.                         paddingBox = K('[name="padding"]', div).val(2),
  260.                         spacingBox = K('[name="spacing"]', div).val(0),
  261.                         alignBox = K('[name="align"]', div),
  262.                         borderBox = K('[name="border"]', div).val(1),
  263.                         colorBox = K('.ke-input-color', div);
  264.                         function setColor(box, color) {
  265.                                 color = color.toUpperCase();
  266.                                 box.css('background-color', color);
  267.                                 box.css('color', color === '#000000' ? '#FFFFFF' : '#000000');
  268.                                 box.html(color);
  269.                         }
  270.                         setColor(K(colorBox[0]), '#000000');
  271.                         setColor(K(colorBox[1]), '');
  272.                         function clickHandler(e) {
  273.                                 removePicker();
  274.                                 if (!picker || this !== currentElement) {
  275.                                         var box = K(this),
  276.                                                 pos = box.pos();
  277.                                         picker = K.colorpicker({
  278.                                                 x : pos.x,
  279.                                                 y : pos.y + box.height(),
  280.                                                 z : 811214,
  281.                                                 selectedColor : K(this).html(),
  282.                                                 colors : self.colorTable,
  283.                                                 noColor : self.lang('noColor'),
  284.                                                 shadowMode : self.shadowMode,
  285.                                                 click : function(color) {
  286.                                                         setColor(box, color);
  287.                                                         removePicker();
  288.                                                 }
  289.                                         });
  290.                                         currentElement = this;
  291.                                 }
  292.                         }
  293.                         colorBox.click(clickHandler);
  294.                         // foucs and select
  295.                         rowsBox[0].focus();
  296.                         rowsBox[0].select();
  297.                         var table;
  298.                         if (isInsert) {
  299.                                 return;
  300.                         }
  301.                         //get selected table node
  302.                         table = self.plugin.getSelectedTable();
  303.                         if (table) {
  304.                                 rowsBox.val(table[0].rows.length);
  305.                                 colsBox.val(table[0].rows.length > 0 ? table[0].rows[0].cells.length : 0);
  306.                                 rowsBox.attr('disabled', true);
  307.                                 colsBox.attr('disabled', true);
  308.                                 var match,
  309.                                         tableWidth = table[0].style.width || table[0].width,
  310.                                         tableHeight = table[0].style.height || table[0].height;
  311.                                 if (tableWidth !== undefined && (match = /^(\d+)((?:px|%)*)$/.exec(tableWidth))) {
  312.                                         widthBox.val(match[1]);
  313.                                         widthTypeBox.val(match[2]);
  314.                                 } else {
  315.                                         widthBox.val('');
  316.                                 }
  317.                                 if (tableHeight !== undefined && (match = /^(\d+)((?:px|%)*)$/.exec(tableHeight))) {
  318.                                         heightBox.val(match[1]);
  319.                                         heightTypeBox.val(match[2]);
  320.                                 }
  321.                                 paddingBox.val(table[0].cellPadding || '');
  322.                                 spacingBox.val(table[0].cellSpacing || '');
  323.                                 alignBox.val(table[0].align || '');
  324.                                 borderBox.val(table[0].border === undefined ? '' : table[0].border);
  325.                                 setColor(K(colorBox[0]), K.toHex(table.attr('borderColor') || ''));
  326.                                 setColor(K(colorBox[1]), K.toHex(table[0].style.backgroundColor || table[0].bgColor || ''));
  327.                                 widthBox[0].focus();
  328.                                 widthBox[0].select();
  329.                         }
  330.                 },
  331.                 //modify cell
  332.                 cellprop : function() {
  333.                         var html = [
  334.                                 '<div style="padding:10px 20px;">',
  335.                                 //width, height
  336.                                 '<div class="ke-dialog-row">',
  337.                                 '<label for="keWidth" style="width:90px;">' + lang.size + '</label>',
  338.                                 lang.width + ' <input type="text" id="keWidth" class="ke-input-text ke-input-number" name="width" value="" maxlength="4" /> &nbsp; ',
  339.                                 '<select name="widthType">',
  340.                                 '<option value="%">' + lang.percent + '</option>',
  341.                                 '<option value="px">' + lang.px + '</option>',
  342.                                 '</select> &nbsp; ',
  343.                                 lang.height + ' <input type="text" class="ke-input-text ke-input-number" name="height" value="" maxlength="4" /> &nbsp; ',
  344.                                 '<select name="heightType">',
  345.                                 '<option value="%">' + lang.percent + '</option>',
  346.                                 '<option value="px">' + lang.px + '</option>',
  347.                                 '</select>',
  348.                                 '</div>',
  349.                                 //align
  350.                                 '<div class="ke-dialog-row">',
  351.                                 '<label for="keAlign" style="width:90px;">' + lang.align + '</label>',
  352.                                 lang.textAlign + ' <select id="keAlign" name="textAlign">',
  353.                                 '<option value="">' + lang.alignDefault + '</option>',
  354.                                 '<option value="left">' + lang.alignLeft + '</option>',
  355.                                 '<option value="center">' + lang.alignCenter + '</option>',
  356.                                 '<option value="right">' + lang.alignRight + '</option>',
  357.                                 '</select> ',
  358.                                 lang.verticalAlign + ' <select name="verticalAlign">',
  359.                                 '<option value="">' + lang.alignDefault + '</option>',
  360.                                 '<option value="top">' + lang.alignTop + '</option>',
  361.                                 '<option value="middle">' + lang.alignMiddle + '</option>',
  362.                                 '<option value="bottom">' + lang.alignBottom + '</option>',
  363.                                 '<option value="baseline">' + lang.alignBaseline + '</option>',
  364.                                 '</select>',
  365.                                 '</div>',
  366.                                 //border
  367.                                 '<div class="ke-dialog-row">',
  368.                                 '<label for="keBorder" style="width:90px;">' + lang.border + '</label>',
  369.                                 lang.borderWidth + ' <input type="text" id="keBorder" class="ke-input-text ke-input-number" name="border" value="" maxlength="4" /> &nbsp; ',
  370.                                 lang.borderColor + ' <span class="ke-inline-block ke-input-color"></span>',
  371.                                 '</div>',
  372.                                 //background color
  373.                                 '<div class="ke-dialog-row">',
  374.                                 '<label for="keBgColor" style="width:90px;">' + lang.backgroundColor + '</label>',
  375.                                 '<span class="ke-inline-block ke-input-color"></span>',
  376.                                 '</div>',
  377.                                 '</div>'
  378.                         ].join('');
  379.                         var picker, currentElement;
  380.                         function removePicker() {
  381.                                 if (picker) {
  382.                                         picker.remove();
  383.                                         picker = null;
  384.                                         currentElement = null;
  385.                                 }
  386.                         }
  387.                         var dialog = self.createDialog({
  388.                                 name : name,
  389.                                 width : 500,
  390.                                 height : 220,
  391.                                 title : self.lang('tablecell'),
  392.                                 body : html,
  393.                                 beforeDrag : removePicker,
  394.                                 beforeRemove : function() {
  395.                                         removePicker();
  396.                                         colorBox.unbind();
  397.                                 },
  398.                                 yesBtn : {
  399.                                         name : self.lang('yes'),
  400.                                         click : function(e) {
  401.                                                 var width = widthBox.val(),
  402.                                                         height = heightBox.val(),
  403.                                                         widthType = widthTypeBox.val(),
  404.                                                         heightType = heightTypeBox.val(),
  405.                                                         padding = paddingBox.val(),
  406.                                                         spacing = spacingBox.val(),
  407.                                                         textAlign = textAlignBox.val(),
  408.                                                         verticalAlign = verticalAlignBox.val(),
  409.                                                         border = borderBox.val(),
  410.                                                         borderColor = K(colorBox[0]).html() || '',
  411.                                                         bgColor = K(colorBox[1]).html() || '';
  412.                                                 if (!/^\d*$/.test(width)) {
  413.                                                         alert(self.lang('invalidWidth'));
  414.                                                         widthBox[0].focus();
  415.                                                         return;
  416.                                                 }
  417.                                                 if (!/^\d*$/.test(height)) {
  418.                                                         alert(self.lang('invalidHeight'));
  419.                                                         heightBox[0].focus();
  420.                                                         return;
  421.                                                 }
  422.                                                 if (!/^\d*$/.test(border)) {
  423.                                                         alert(self.lang('invalidBorder'));
  424.                                                         borderBox[0].focus();
  425.                                                         return;
  426.                                                 }
  427.                                                 cell.css({
  428.                                                         width : width !== '' ? (width + widthType) : '',
  429.                                                         height : height !== '' ? (height + heightType) : '',
  430.                                                         'background-color' : bgColor,
  431.                                                         'text-align' : textAlign,
  432.                                                         'vertical-align' : verticalAlign,
  433.                                                         'border-width' : border,
  434.                                                         'border-style' : border !== '' ? 'solid' : '',
  435.                                                         'border-color' : borderColor
  436.                                                 });
  437.                                                 self.hideDialog().focus();
  438.                                                 self.addBookmark();
  439.                                         }
  440.                                 }
  441.                         }),
  442.                         div = dialog.div,
  443.                         widthBox = K('[name="width"]', div).val(100),
  444.                         heightBox = K('[name="height"]', div),
  445.                         widthTypeBox = K('[name="widthType"]', div),
  446.                         heightTypeBox = K('[name="heightType"]', div),
  447.                         paddingBox = K('[name="padding"]', div).val(2),
  448.                         spacingBox = K('[name="spacing"]', div).val(0),
  449.                         textAlignBox = K('[name="textAlign"]', div),
  450.                         verticalAlignBox = K('[name="verticalAlign"]', div),
  451.                         borderBox = K('[name="border"]', div).val(1),
  452.                         colorBox = K('.ke-input-color', div);
  453.                         function setColor(box, color) {
  454.                                 color = color.toUpperCase();
  455.                                 box.css('background-color', color);
  456.                                 box.css('color', color === '#000000' ? '#FFFFFF' : '#000000');
  457.                                 box.html(color);
  458.                         }
  459.                         setColor(K(colorBox[0]), '#000000');
  460.                         setColor(K(colorBox[1]), '');
  461.                         function clickHandler(e) {
  462.                                 removePicker();
  463.                                 if (!picker || this !== currentElement) {
  464.                                         var box = K(this),
  465.                                                 pos = box.pos();
  466.                                         picker = K.colorpicker({
  467.                                                 x : pos.x,
  468.                                                 y : pos.y + box.height(),
  469.                                                 z : 811214,
  470.                                                 selectedColor : K(this).html(),
  471.                                                 colors : self.colorTable,
  472.                                                 noColor : self.lang('noColor'),
  473.                                                 shadowMode : self.shadowMode,
  474.                                                 click : function(color) {
  475.                                                         setColor(box, color);
  476.                                                         removePicker();
  477.                                                 }
  478.                                         });
  479.                                         currentElement = this;
  480.                                 }
  481.                         }
  482.                         colorBox.click(clickHandler);
  483.                         // foucs and select
  484.                         widthBox[0].focus();
  485.                         widthBox[0].select();
  486.                         // get selected cell
  487.                         var cell = self.plugin.getSelectedCell();
  488.                         var match,
  489.                                 cellWidth = cell[0].style.width || cell[0].width || '',
  490.                                 cellHeight = cell[0].style.height || cell[0].height || '';
  491.                         if ((match = /^(\d+)((?:px|%)*)$/.exec(cellWidth))) {
  492.                                 widthBox.val(match[1]);
  493.                                 widthTypeBox.val(match[2]);
  494.                         } else {
  495.                                 widthBox.val('');
  496.                         }
  497.                         if ((match = /^(\d+)((?:px|%)*)$/.exec(cellHeight))) {
  498.                                 heightBox.val(match[1]);
  499.                                 heightTypeBox.val(match[2]);
  500.                         }
  501.                         textAlignBox.val(cell[0].style.textAlign || '');
  502.                         verticalAlignBox.val(cell[0].style.verticalAlign || '');
  503.                         var border = cell[0].style.borderWidth || '';
  504.                         if (border) {
  505.                                 border = parseInt(border);
  506.                         }
  507.                         borderBox.val(border);
  508.                         setColor(K(colorBox[0]), K.toHex(cell[0].style.borderColor || ''));
  509.                         setColor(K(colorBox[1]), K.toHex(cell[0].style.backgroundColor || ''));
  510.                         widthBox[0].focus();
  511.                         widthBox[0].select();
  512.                 },
  513.                 insert : function() {
  514.                         this.prop(true);
  515.                 },
  516.                 'delete' : function() {
  517.                         var table = self.plugin.getSelectedTable();
  518.                         self.cmd.range.setStartBefore(table[0]).collapse(true);
  519.                         self.cmd.select();
  520.                         table.remove();
  521.                         self.addBookmark();
  522.                 },
  523.                 colinsert : function(offset) {
  524.                         var table = self.plugin.getSelectedTable()[0],
  525.                                 row = self.plugin.getSelectedRow()[0],
  526.                                 cell = self.plugin.getSelectedCell()[0],
  527.                                 index = cell.cellIndex + offset;
  528.                         for (var i = 0, len = table.rows.length; i < len; i++) {
  529.                                 var newRow = table.rows[i],
  530.                                         newCell = newRow.insertCell(index);
  531.                                 newCell.innerHTML = K.IE ? '' : '<br />';
  532.                                 // 调整下一行的单元格index
  533.                                 index = _getCellIndex(table, newRow, newCell);
  534.                         }
  535.                         self.cmd.range.selectNodeContents(cell).collapse(true);
  536.                         self.cmd.select();
  537.                         self.addBookmark();
  538.                 },
  539.                 colinsertleft : function() {
  540.                         this.colinsert(0);
  541.                 },
  542.                 colinsertright : function() {
  543.                         this.colinsert(1);
  544.                 },
  545.                 rowinsert : function(offset) {
  546.                         var table = self.plugin.getSelectedTable()[0],
  547.                                 row = self.plugin.getSelectedRow()[0],
  548.                                 cell = self.plugin.getSelectedCell()[0],
  549.                                 newRow;
  550.                         if (offset === 1) {
  551.                                 newRow = table.insertRow(row.rowIndex + (cell.rowSpan - 1) + offset);
  552.                         } else {
  553.                                 newRow = table.insertRow(row.rowIndex);
  554.                         }
  555.                         for (var i = 0, len = row.cells.length; i < len; i++) {
  556.                                 var newCell = newRow.insertCell(i);
  557.                                 // copy colspan
  558.                                 if (offset === 1 && row.cells[i].colSpan > 1) {
  559.                                         newCell.colSpan = row.cells[i].colSpan;
  560.                                 }
  561.                                 newCell.innerHTML = K.IE ? '' : '<br />';
  562.                         }
  563.                         self.cmd.range.selectNodeContents(cell).collapse(true);
  564.                         self.cmd.select();
  565.                         self.addBookmark();
  566.                 },
  567.                 rowinsertabove : function() {
  568.                         this.rowinsert(0);
  569.                 },
  570.                 rowinsertbelow : function() {
  571.                         this.rowinsert(1);
  572.                 },
  573.                 rowmerge : function() {
  574.                         var table = self.plugin.getSelectedTable()[0],
  575.                                 row = self.plugin.getSelectedRow()[0],
  576.                                 cell = self.plugin.getSelectedCell()[0],
  577.                                 rowIndex = row.rowIndex, // 当前行的index
  578.                                 nextRowIndex = rowIndex + cell.rowSpan, // 下一行的index
  579.                                 nextRow = table.rows[nextRowIndex]; // 下一行
  580.                         // 最后一行不能合并
  581.                         if (table.rows.length <= nextRowIndex) {
  582.                                 return;
  583.                         }
  584.                         var cellIndex = _getCellIndex(table, row, cell); // 下一行单元格的index
  585.                         if (nextRow.cells.length <= cellIndex) {
  586.                                 return;
  587.                         }
  588.                         var nextCell = nextRow.cells[cellIndex]; // 下一行单元格
  589.                         // 上下行的colspan不一致时不能合并
  590.                         if (cell.colSpan !== nextCell.colSpan) {
  591.                                 return;
  592.                         }
  593.                         cell.rowSpan += nextCell.rowSpan;
  594.                         nextRow.deleteCell(cellIndex);
  595.                         self.cmd.range.selectNodeContents(cell).collapse(true);
  596.                         self.cmd.select();
  597.                         self.addBookmark();
  598.                 },
  599.                 colmerge : function() {
  600.                         var table = self.plugin.getSelectedTable()[0],
  601.                                 row = self.plugin.getSelectedRow()[0],
  602.                                 cell = self.plugin.getSelectedCell()[0],
  603.                                 rowIndex = row.rowIndex, // 当前行的index
  604.                                 cellIndex = cell.cellIndex,
  605.                                 nextCellIndex = cellIndex + 1;
  606.                         // 最后一列不能合并
  607.                         if (row.cells.length <= nextCellIndex) {
  608.                                 return;
  609.                         }
  610.                         var nextCell = row.cells[nextCellIndex];
  611.                         // 左右列的rowspan不一致时不能合并
  612.                         if (cell.rowSpan !== nextCell.rowSpan) {
  613.                                 return;
  614.                         }
  615.                         cell.colSpan += nextCell.colSpan;
  616.                         row.deleteCell(nextCellIndex);
  617.                         self.cmd.range.selectNodeContents(cell).collapse(true);
  618.                         self.cmd.select();
  619.                         self.addBookmark();
  620.                 },
  621.                 rowsplit : function() {
  622.                         var table = self.plugin.getSelectedTable()[0],
  623.                                 row = self.plugin.getSelectedRow()[0],
  624.                                 cell = self.plugin.getSelectedCell()[0],
  625.                                 rowIndex = row.rowIndex;
  626.                         // 不是可分割单元格
  627.                         if (cell.rowSpan === 1) {
  628.                                 return;
  629.                         }
  630.                         var cellIndex = _getCellIndex(table, row, cell);
  631.                         for (var i = 1, len = cell.rowSpan; i < len; i++) {
  632.                                 var newRow = table.rows[rowIndex + i],
  633.                                         newCell = newRow.insertCell(cellIndex);
  634.                                 if (cell.colSpan > 1) {
  635.                                         newCell.colSpan = cell.colSpan;
  636.                                 }
  637.                                 newCell.innerHTML = K.IE ? '' : '<br />';
  638.                                 // 调整下一行的单元格index
  639.                                 cellIndex = _getCellIndex(table, newRow, newCell);
  640.                         }
  641.                         K(cell).removeAttr('rowSpan');
  642.                         self.cmd.range.selectNodeContents(cell).collapse(true);
  643.                         self.cmd.select();
  644.                         self.addBookmark();
  645.                 },
  646.                 colsplit : function() {
  647.                         var table = self.plugin.getSelectedTable()[0],
  648.                                 row = self.plugin.getSelectedRow()[0],
  649.                                 cell = self.plugin.getSelectedCell()[0],
  650.                                 cellIndex = cell.cellIndex;
  651.                         // 不是可分割单元格
  652.                         if (cell.colSpan === 1) {
  653.                                 return;
  654.                         }
  655.                         for (var i = 1, len = cell.colSpan; i < len; i++) {
  656.                                 var newCell = row.insertCell(cellIndex + i);
  657.                                 if (cell.rowSpan > 1) {
  658.                                         newCell.rowSpan = cell.rowSpan;
  659.                                 }
  660.                                 newCell.innerHTML = K.IE ? '' : '<br />';
  661.                         }
  662.                         K(cell).removeAttr('colSpan');
  663.                         self.cmd.range.selectNodeContents(cell).collapse(true);
  664.                         self.cmd.select();
  665.                         self.addBookmark();
  666.                 },
  667.                 coldelete : function() {
  668.                         var table = self.plugin.getSelectedTable()[0],
  669.                                 row = self.plugin.getSelectedRow()[0],
  670.                                 cell = self.plugin.getSelectedCell()[0],
  671.                                 index = cell.cellIndex;
  672.                         for (var i = 0, len = table.rows.length; i < len; i++) {
  673.                                 var newRow = table.rows[i],
  674.                                         newCell = newRow.cells[index];
  675.                                 if (newCell.colSpan > 1) {
  676.                                         newCell.colSpan -= 1;
  677.                                         if (newCell.colSpan === 1) {
  678.                                                 K(newCell).removeAttr('colSpan');
  679.                                         }
  680.                                 } else {
  681.                                         newRow.deleteCell(index);
  682.                                 }
  683.                                 // 跳过不需要删除的行
  684.                                 if (newCell.rowSpan > 1) {
  685.                                         i += newCell.rowSpan - 1;
  686.                                 }
  687.                         }
  688.                         if (row.cells.length === 0) {
  689.                                 self.cmd.range.setStartBefore(table).collapse(true);
  690.                                 self.cmd.select();
  691.                                 K(table).remove();
  692.                         } else {
  693.                                 self.cmd.selection(true);
  694.                         }
  695.                         self.addBookmark();
  696.                 },
  697.                 rowdelete : function() {
  698.                         var table = self.plugin.getSelectedTable()[0],
  699.                                 row = self.plugin.getSelectedRow()[0],
  700.                                 cell = self.plugin.getSelectedCell()[0],
  701.                                 rowIndex = row.rowIndex;
  702.                         // 从下到上删除
  703.                         for (var i = cell.rowSpan - 1; i >= 0; i--) {
  704.                                 table.deleteRow(rowIndex + i);
  705.                         }
  706.                         if (table.rows.length === 0) {
  707.                                 self.cmd.range.setStartBefore(table).collapse(true);
  708.                                 self.cmd.select();
  709.                                 K(table).remove();
  710.                         } else {
  711.                                 self.cmd.selection(true);
  712.                         }
  713.                         self.addBookmark();
  714.                 }
  715.         };
  716.         self.clickToolbar(name, self.plugin.table.prop);
  717. });
  718.  
downloadtable.js Source code - Download Project management software KisProject v1.0.3 Source code
Related Source Codes/Software:
MyProber PHP 0.26 a probe - MyProber v0.26 2016-10-23
Food science and technology chain edition v1.1 online reservation system - Treat chain version of the main functions of the o... 2016-10-23
Emlog for SAE v4.2.1 - Emlog for SAE is suitable for SAE emlog used modif... 2016-10-23
Easy website system v2.0 - Business easy built station system (Sunnyi Website... 2016-10-23
Good business mall v2.0 open source edition - Good business, open source shopping mall, which is... 2016-10-23
HP fetion automatic daily weather forecast v1.0 - HP fetion daily automated weather main uses 1. ac... 2016-10-23
Valley dad imitate homepage search - Modified more concise and convenient, but there is... 2016-10-23
hpMyAdmin v3.4.11 For Linux - HpMyAdmin is a PHP based, architecture in Web - Ba... 2016-10-23
V1.4 jmapcms website development system - 1. Modify the CHKJS file loading animation has alw... 2016-10-23
More than the V6.2 taobao guest program - Amoy Taobao V6.2 for short procedures, adopted a P... 2016-10-23
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top