vxe-table-select-area
Version:
一个基于 vxe-table 的可区域选中复制、粘贴的组件
1 lines • 4.79 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports.decodeSpreadsheetStr=decodeSpreadsheetStr,exports.encodeToSpreadsheetStr=encodeToSpreadsheetStr,exports.onAfterCopy=onAfterCopy,exports.onAfterCut=onAfterCut,exports.onAfterDelete=onAfterDelete,exports.onAfterPaste=onAfterPaste,exports.onBeforeCopy=onBeforeCopy,exports.onBeforeCut=onBeforeCut,exports.onBeforeDelete=onBeforeDelete,exports.onBeforePaste=onBeforePaste;var regUniversalNewLine=/^(\r\n|\n\r|\r|\n)/,regNextCellNoQuotes=/^[^\t\r\n]+/,regNextEmptyCell=/^\t/;function decodeSpreadsheetStr(e){var t=[[""]];if(0!==e.length){for(var n,o=0,a=0;0<e.length&&n!==e.length;)if(n=e.length,e.match(regNextEmptyCell))e=e.replace(regNextEmptyCell,""),t[a][o+=1]="";else if(e.match(regUniversalNewLine))e=e.replace(regUniversalNewLine,""),o=0,t[a+=1]=[""];else{var r="";if(e.startsWith('"')){for(var l=0,d=!0;d;){var i=e.slice(0,1);'"'===i&&(l+=1),r+=i,(0===(e=e.slice(1)).length||e.match(/^[\t\r\n]/)&&l%2==0)&&(d=!1)}r=r.replace(/^"/,"").replace(/"$/,"").replace(/["]*/g,function(e){return new Array(Math.floor(e.length/2)).fill('"').join("")})}else{var s=e.match(regNextCellNoQuotes),r=s?s[0]:"";e=e.slice(r.length)}t[a][o]=r}Array.isArray(t)&&1<t.length&&1===t[t.length-1].length&&""===t[t.length-1][0]&&(t=t.slice(0,t.length-1))}return t}function encodeToSpreadsheetStr(e){for(var t,n,o,a="",r=0,l=e.length;r<l;r+=1){for(n=e[r].length,t=0;t<n;t+=1)0<t&&(a+="\t"),"string"==typeof(o=e[r][t])?-1<o.indexOf("\n")?a+='"'.concat(o.replace(/"/g,'""'),'"'):a+=o:a+=null==o?"":o;r!==l-1&&(a+="\n")}return a}function onBeforeCopy(e){var t=e.cellSelectionRangeData,n=e.selectionRangeData,o=e.colgroups,e=e.allRowKeys,a=t.leftColKey,r=t.rightColKey,l=t.topRowKey,t=t.bottomRowKey;return{selectionRangeIndexes:{startColIndex:o.findIndex(function(e){return e.key===a}),endColIndex:o.findIndex(function(e){return e.key===r}),startRowIndex:e.indexOf(l),endRowIndex:e.indexOf(t)},selectionRangeKeys:{startColKey:a,endColKey:r,startRowKey:l,endRowKey:t},data:n}}function onAfterCopy(e){var t=e.event,e=encodeToSpreadsheetStr(e.selectionRangeData);t.clipboardData?t.clipboardData.setData("text/plain",e):window.clipboardData&&window.clipboardData.setData("Text",e)}function onBeforePaste(e){var o,a,t,n,r,l=e.event,d=e.cellSelectionRangeData,i=e.colgroups,e=e.allRowKeys;return l.clipboardData?t=l.clipboardData.getData("text/plain"):window.clipboardData&&(t=window.clipboardData.getData("Text")),"string"!=typeof t?null:(l=decodeSpreadsheetStr(t),o=i.findIndex(function(e){return e.key===d.leftColKey}),a=Math.min(o+l[0].length-1,i.length-1),t=e.indexOf(d.topRowKey),n=Math.min(t+l.length-1,e.length-1),e={selectionRangeIndexes:{startColIndex:o,endColIndex:a,startRowIndex:t,endRowIndex:n},selectionRangeKeys:{startColKey:i[o].key,endColKey:i[a].key,startRowKey:e[t],endRowKey:e[n]},data:[]},r=i.slice(o,a+1).map(function(e){return e.field}),e.data=l.slice(0,n-t+1).map(function(e){var n={};return e.forEach(function(e,t){t<=a-o&&(n[r[t]]=e)}),n}),e)}function onAfterPaste(e){var n=e.tableData,e=e.beforePasteResponse,t=e.data,o=e.selectionRangeIndexes;t.forEach(function(e,t){Object.assign(n[o.startRowIndex+t],e)})}function onBeforeCut(e){var t=e.cellSelectionRangeData,n=e.selectionRangeData,o=e.colgroups,e=e.allRowKeys,a=t.leftColKey,r=t.rightColKey,l=t.topRowKey,t=t.bottomRowKey;return{selectionRangeIndexes:{startColIndex:o.findIndex(function(e){return e.key===a}),endColIndex:o.findIndex(function(e){return e.key===r}),startRowIndex:e.indexOf(l),endRowIndex:e.indexOf(t)},selectionRangeKeys:{startColKey:a,endColKey:r,startRowKey:l,endRowKey:t},data:n}}function onAfterCut(e){var t=e.event,n=e.tableData,o=e.colgroups,a=e.selectionRangeData,e=e.selectionRangeIndexes,a=encodeToSpreadsheetStr(a),r=e.endColIndex,l=e.endRowIndex,d=e.startColIndex,i=e.startRowIndex,s=o.slice(d,r+1).map(function(e){return e.field});n.forEach(function(t,e){i<=e&&e<=l&&s.forEach(function(e){t[e]=""})}),t.clipboardData?t.clipboardData.setData("text/plain",a):window.clipboardData&&window.clipboardData.setData("Text",a)}function onBeforeDelete(e){var t=e.cellSelectionRangeData,n=e.selectionRangeData,o=e.colgroups,e=e.allRowKeys,a=t.leftColKey,r=t.rightColKey,l=t.topRowKey,t=t.bottomRowKey;return{selectionRangeIndexes:{startColIndex:o.findIndex(function(e){return e.key===a}),endColIndex:o.findIndex(function(e){return e.key===r}),startRowIndex:e.indexOf(l),endRowIndex:e.indexOf(t)},selectionRangeKeys:{startColKey:a,endColKey:r,startRowKey:l,endRowKey:t},data:n}}function onAfterDelete(e){var t=e.tableData,n=e.colgroups,e=e.selectionRangeIndexes,o=e.endColIndex,a=e.endRowIndex,r=e.startColIndex,l=e.startRowIndex,d=n.slice(r,o+1).map(function(e){return e.field});t.forEach(function(t,e){l<=e&&e<=a&&d.forEach(function(e){t[e]=""})})}