| /*! |
| (The MIT License) |
| |
| Copyright (c) 2012-2014 Marcin Warpechowski |
| Copyright (c) 2015 Handsoncode sp. z o.o. <hello@handsoncode.net> |
| |
| Permission is hereby granted, free of charge, to any person obtaining |
| a copy of this software and associated documentation files (the |
| 'Software'), to deal in the Software without restriction, including |
| without limitation the rights to use, copy, modify, merge, publish, |
| distribute, sublicense, and/or sell copies of the Software, and to |
| permit persons to whom the Software is furnished to do so, subject to |
| the following conditions: |
| |
| The above copyright notice and this permission notice shall be |
| included in all copies or substantial portions of the Software. |
| |
| THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, |
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
| IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
| CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
| SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| |
| */ |
| (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Handsontable = f()}})(function(){var define,module,exports;return (function outer (modules, cache, entry) { |
| // Save the require from previous bundle to this closure if any |
| var previousRequire = typeof require == "function" && require; |
| var globalNS = JSON.parse('{"zeroclipboard":"ZeroClipboard","moment":"moment","numbro":"numbro","pikaday":"Pikaday"}') || {}; |
| |
| function newRequire(name, jumped){ |
| if(!cache[name]) { |
| |
| if(!modules[name]) { |
| // if we cannot find the the module within our internal map or |
| // cache jump to the current global require ie. the last bundle |
| // that was added to the page. |
| var currentRequire = typeof require == "function" && require; |
| if (!jumped && currentRequire) return currentRequire(name, true); |
| |
| // If there are other bundles on this page the require from the |
| // previous one is saved to 'previousRequire'. Repeat this as |
| // many times as there are bundles until the module is found or |
| // we exhaust the require chain. |
| if (previousRequire) return previousRequire(name, true); |
| |
| // Try to find module from global scope |
| if (globalNS[name] && typeof window[globalNS[name]] !== 'undefined') { |
| return window[globalNS[name]]; |
| } |
| |
| var err = new Error('Cannot find module \'' + name + '\''); |
| err.code = 'MODULE_NOT_FOUND'; |
| throw err; |
| } |
| var m = cache[name] = {exports:{}}; |
| modules[name][0].call(m.exports, function(x){ |
| var id = modules[name][1][x]; |
| return newRequire(id ? id : x); |
| },m,m.exports,outer,modules,cache,entry); |
| } |
| |
| return cache[name].exports; |
| } |
| for(var i=0;i<entry.length;i++) newRequire(entry[i]); |
| |
| // Override the current require with this new one |
| return newRequire; |
| }) |
| ({1:[function(_dereq_,module,exports){ |
| |
| },{}],2:[function(_dereq_,module,exports){ |
| if (window.jQuery) { |
| (function ($) { |
| $.fn.handsontable = function (action) { |
| var i, |
| ilen, |
| args, |
| output, |
| userSettings, |
| $this = this.first(), // Use only first element from list |
| instance = $this.data('handsontable'); |
| |
| // Init case |
| if (typeof action !== 'string') { |
| userSettings = action || {}; |
| |
| if (instance) { |
| instance.updateSettings(userSettings); |
| |
| } else { |
| instance = new Handsontable.Core($this[0], userSettings); |
| $this.data('handsontable', instance); |
| instance.init(); |
| } |
| |
| return $this; |
| |
| } else { // Action case |
| args = []; |
| |
| if (arguments.length > 1) { |
| for (i = 1, ilen = arguments.length; i < ilen; i++) { |
| args.push(arguments[i]); |
| } |
| } |
| |
| if (instance) { |
| if (typeof instance[action] !== 'undefined') { |
| output = instance[action].apply(instance, args); |
| |
| if (action === 'destroy') { |
| $this.removeData(); |
| } |
| |
| } else { |
| throw new Error('Handsontable do not provide action: ' + action); |
| } |
| } |
| |
| return output; |
| } |
| }; |
| })(window.jQuery); |
| } |
| |
| |
| |
| },{}],3:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableBorder: {get: function() { |
| return WalkontableBorder; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_event__, |
| $___46__46__47__46__46__47__46__46__47_helpers_47_browser__, |
| $___46__46__47__46__46__47__46__46__47_eventManager__, |
| $__cell_47_coords__, |
| $__overlay_47__95_base_46_js__; |
| var $__0 = ($___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| getComputedStyle = $__0.getComputedStyle, |
| getTrimmingContainer = $__0.getTrimmingContainer, |
| innerWidth = $__0.innerWidth, |
| innerHeight = $__0.innerHeight, |
| offset = $__0.offset, |
| outerHeight = $__0.outerHeight, |
| outerWidth = $__0.outerWidth; |
| var stopImmediatePropagation = ($___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_event__ && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_event__}).stopImmediatePropagation; |
| var isMobileBrowser = ($___46__46__47__46__46__47__46__46__47_helpers_47_browser__ = _dereq_("helpers/browser"), $___46__46__47__46__46__47__46__46__47_helpers_47_browser__ && $___46__46__47__46__46__47__46__46__47_helpers_47_browser__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_browser__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_browser__}).isMobileBrowser; |
| var EventManager = ($___46__46__47__46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47__46__46__47_eventManager__}).EventManager; |
| var WalkontableCellCoords = ($__cell_47_coords__ = _dereq_("cell/coords"), $__cell_47_coords__ && $__cell_47_coords__.__esModule && $__cell_47_coords__ || {default: $__cell_47_coords__}).WalkontableCellCoords; |
| var WalkontableOverlay = ($__overlay_47__95_base_46_js__ = _dereq_("overlay/_base.js"), $__overlay_47__95_base_46_js__ && $__overlay_47__95_base_46_js__.__esModule && $__overlay_47__95_base_46_js__ || {default: $__overlay_47__95_base_46_js__}).WalkontableOverlay; |
| var WalkontableBorder = function WalkontableBorder(wotInstance, settings) { |
| if (!settings) { |
| return; |
| } |
| this.eventManager = new EventManager(wotInstance); |
| this.instance = wotInstance; |
| this.wot = wotInstance; |
| this.settings = settings; |
| this.mouseDown = false; |
| this.main = null; |
| this.top = null; |
| this.left = null; |
| this.bottom = null; |
| this.right = null; |
| this.topStyle = null; |
| this.leftStyle = null; |
| this.bottomStyle = null; |
| this.rightStyle = null; |
| this.cornerDefaultStyle = { |
| width: '5px', |
| height: '5px', |
| borderWidth: '2px', |
| borderStyle: 'solid', |
| borderColor: '#FFF' |
| }; |
| this.corner = null; |
| this.cornerStyle = null; |
| this.createBorders(settings); |
| this.registerListeners(); |
| }; |
| ($traceurRuntime.createClass)(WalkontableBorder, { |
| registerListeners: function() { |
| var $__6 = this; |
| this.eventManager.addEventListener(document.body, 'mousedown', (function() { |
| return $__6.onMouseDown(); |
| })); |
| this.eventManager.addEventListener(document.body, 'mouseup', (function() { |
| return $__6.onMouseUp(); |
| })); |
| var $__8 = this, |
| $__9 = function(c, len) { |
| $__8.eventManager.addEventListener($__8.main.childNodes[c], 'mouseenter', (function(event) { |
| return $__6.onMouseEnter(event, $__6.main.childNodes[c]); |
| })); |
| }; |
| for (var c = 0, |
| len = this.main.childNodes.length; c < len; c++) { |
| $__9(c, len); |
| } |
| }, |
| onMouseDown: function() { |
| this.mouseDown = true; |
| }, |
| onMouseUp: function() { |
| this.mouseDown = false; |
| }, |
| onMouseEnter: function(event, parentElement) { |
| if (!this.mouseDown || !this.wot.getSetting('hideBorderOnMouseDownOver')) { |
| return; |
| } |
| event.preventDefault(); |
| stopImmediatePropagation(event); |
| var _this = this; |
| var bounds = parentElement.getBoundingClientRect(); |
| parentElement.style.display = 'none'; |
| function isOutside(event) { |
| if (event.clientY < Math.floor(bounds.top)) { |
| return true; |
| } |
| if (event.clientY > Math.ceil(bounds.top + bounds.height)) { |
| return true; |
| } |
| if (event.clientX < Math.floor(bounds.left)) { |
| return true; |
| } |
| if (event.clientX > Math.ceil(bounds.left + bounds.width)) { |
| return true; |
| } |
| } |
| function handler(event) { |
| if (isOutside(event)) { |
| _this.eventManager.removeEventListener(document.body, 'mousemove', handler); |
| parentElement.style.display = 'block'; |
| } |
| } |
| this.eventManager.addEventListener(document.body, 'mousemove', handler); |
| }, |
| createBorders: function(settings) { |
| this.main = document.createElement('div'); |
| var borderDivs = ['top', 'left', 'bottom', 'right', 'corner']; |
| var style = this.main.style; |
| style.position = 'absolute'; |
| style.top = 0; |
| style.left = 0; |
| for (var i = 0; i < 5; i++) { |
| var position = borderDivs[i]; |
| var div = document.createElement('div'); |
| div.className = 'wtBorder ' + (this.settings.className || ''); |
| if (this.settings[position] && this.settings[position].hide) { |
| div.className += ' hidden'; |
| } |
| style = div.style; |
| style.backgroundColor = (this.settings[position] && this.settings[position].color) ? this.settings[position].color : settings.border.color; |
| style.height = (this.settings[position] && this.settings[position].width) ? this.settings[position].width + 'px' : settings.border.width + 'px'; |
| style.width = (this.settings[position] && this.settings[position].width) ? this.settings[position].width + 'px' : settings.border.width + 'px'; |
| this.main.appendChild(div); |
| } |
| this.top = this.main.childNodes[0]; |
| this.left = this.main.childNodes[1]; |
| this.bottom = this.main.childNodes[2]; |
| this.right = this.main.childNodes[3]; |
| this.topStyle = this.top.style; |
| this.leftStyle = this.left.style; |
| this.bottomStyle = this.bottom.style; |
| this.rightStyle = this.right.style; |
| this.corner = this.main.childNodes[4]; |
| this.corner.className += ' corner'; |
| this.cornerStyle = this.corner.style; |
| this.cornerStyle.width = this.cornerDefaultStyle.width; |
| this.cornerStyle.height = this.cornerDefaultStyle.height; |
| this.cornerStyle.border = [this.cornerDefaultStyle.borderWidth, this.cornerDefaultStyle.borderStyle, this.cornerDefaultStyle.borderColor].join(' '); |
| if (isMobileBrowser()) { |
| this.createMultipleSelectorHandles(); |
| } |
| this.disappear(); |
| if (!this.wot.wtTable.bordersHolder) { |
| this.wot.wtTable.bordersHolder = document.createElement('div'); |
| this.wot.wtTable.bordersHolder.className = 'htBorders'; |
| this.wot.wtTable.spreader.appendChild(this.wot.wtTable.bordersHolder); |
| } |
| this.wot.wtTable.bordersHolder.insertBefore(this.main, this.wot.wtTable.bordersHolder.firstChild); |
| }, |
| createMultipleSelectorHandles: function() { |
| this.selectionHandles = { |
| topLeft: document.createElement('DIV'), |
| topLeftHitArea: document.createElement('DIV'), |
| bottomRight: document.createElement('DIV'), |
| bottomRightHitArea: document.createElement('DIV') |
| }; |
| var width = 10; |
| var hitAreaWidth = 40; |
| this.selectionHandles.topLeft.className = 'topLeftSelectionHandle'; |
| this.selectionHandles.topLeftHitArea.className = 'topLeftSelectionHandle-HitArea'; |
| this.selectionHandles.bottomRight.className = 'bottomRightSelectionHandle'; |
| this.selectionHandles.bottomRightHitArea.className = 'bottomRightSelectionHandle-HitArea'; |
| this.selectionHandles.styles = { |
| topLeft: this.selectionHandles.topLeft.style, |
| topLeftHitArea: this.selectionHandles.topLeftHitArea.style, |
| bottomRight: this.selectionHandles.bottomRight.style, |
| bottomRightHitArea: this.selectionHandles.bottomRightHitArea.style |
| }; |
| var hitAreaStyle = { |
| position: 'absolute', |
| height: hitAreaWidth + 'px', |
| width: hitAreaWidth + 'px', |
| 'border-radius': parseInt(hitAreaWidth / 1.5, 10) + 'px' |
| }; |
| for (var prop in hitAreaStyle) { |
| if (hitAreaStyle.hasOwnProperty(prop)) { |
| this.selectionHandles.styles.bottomRightHitArea[prop] = hitAreaStyle[prop]; |
| this.selectionHandles.styles.topLeftHitArea[prop] = hitAreaStyle[prop]; |
| } |
| } |
| var handleStyle = { |
| position: 'absolute', |
| height: width + 'px', |
| width: width + 'px', |
| 'border-radius': parseInt(width / 1.5, 10) + 'px', |
| background: '#F5F5FF', |
| border: '1px solid #4285c8' |
| }; |
| for (var prop$__10 in handleStyle) { |
| if (handleStyle.hasOwnProperty(prop$__10)) { |
| this.selectionHandles.styles.bottomRight[prop$__10] = handleStyle[prop$__10]; |
| this.selectionHandles.styles.topLeft[prop$__10] = handleStyle[prop$__10]; |
| } |
| } |
| this.main.appendChild(this.selectionHandles.topLeft); |
| this.main.appendChild(this.selectionHandles.bottomRight); |
| this.main.appendChild(this.selectionHandles.topLeftHitArea); |
| this.main.appendChild(this.selectionHandles.bottomRightHitArea); |
| }, |
| isPartRange: function(row, col) { |
| if (this.wot.selections.area.cellRange) { |
| if (row != this.wot.selections.area.cellRange.to.row || col != this.wot.selections.area.cellRange.to.col) { |
| return true; |
| } |
| } |
| return false; |
| }, |
| updateMultipleSelectionHandlesPosition: function(row, col, top, left, width, height) { |
| var handleWidth = parseInt(this.selectionHandles.styles.topLeft.width, 10); |
| var hitAreaWidth = parseInt(this.selectionHandles.styles.topLeftHitArea.width, 10); |
| this.selectionHandles.styles.topLeft.top = parseInt(top - handleWidth, 10) + 'px'; |
| this.selectionHandles.styles.topLeft.left = parseInt(left - handleWidth, 10) + 'px'; |
| this.selectionHandles.styles.topLeftHitArea.top = parseInt(top - (hitAreaWidth / 4) * 3, 10) + 'px'; |
| this.selectionHandles.styles.topLeftHitArea.left = parseInt(left - (hitAreaWidth / 4) * 3, 10) + 'px'; |
| this.selectionHandles.styles.bottomRight.top = parseInt(top + height, 10) + 'px'; |
| this.selectionHandles.styles.bottomRight.left = parseInt(left + width, 10) + 'px'; |
| this.selectionHandles.styles.bottomRightHitArea.top = parseInt(top + height - hitAreaWidth / 4, 10) + 'px'; |
| this.selectionHandles.styles.bottomRightHitArea.left = parseInt(left + width - hitAreaWidth / 4, 10) + 'px'; |
| if (this.settings.border.multipleSelectionHandlesVisible && this.settings.border.multipleSelectionHandlesVisible()) { |
| this.selectionHandles.styles.topLeft.display = 'block'; |
| this.selectionHandles.styles.topLeftHitArea.display = 'block'; |
| if (this.isPartRange(row, col)) { |
| this.selectionHandles.styles.bottomRight.display = 'none'; |
| this.selectionHandles.styles.bottomRightHitArea.display = 'none'; |
| } else { |
| this.selectionHandles.styles.bottomRight.display = 'block'; |
| this.selectionHandles.styles.bottomRightHitArea.display = 'block'; |
| } |
| } else { |
| this.selectionHandles.styles.topLeft.display = 'none'; |
| this.selectionHandles.styles.bottomRight.display = 'none'; |
| this.selectionHandles.styles.topLeftHitArea.display = 'none'; |
| this.selectionHandles.styles.bottomRightHitArea.display = 'none'; |
| } |
| if (row == this.wot.wtSettings.getSetting('fixedRowsTop') || col == this.wot.wtSettings.getSetting('fixedColumnsLeft')) { |
| this.selectionHandles.styles.topLeft.zIndex = '9999'; |
| this.selectionHandles.styles.topLeftHitArea.zIndex = '9999'; |
| } else { |
| this.selectionHandles.styles.topLeft.zIndex = ''; |
| this.selectionHandles.styles.topLeftHitArea.zIndex = ''; |
| } |
| }, |
| appear: function(corners) { |
| if (this.disabled) { |
| return; |
| } |
| var isMultiple, |
| fromTD, |
| toTD, |
| fromOffset, |
| toOffset, |
| containerOffset, |
| top, |
| minTop, |
| left, |
| minLeft, |
| height, |
| width, |
| fromRow, |
| fromColumn, |
| toRow, |
| toColumn, |
| trimmingContainer, |
| cornerOverlappingContainer, |
| ilen; |
| ilen = this.wot.wtTable.getRenderedRowsCount(); |
| for (var i = 0; i < ilen; i++) { |
| var s = this.wot.wtTable.rowFilter.renderedToSource(i); |
| if (s >= corners[0] && s <= corners[2]) { |
| fromRow = s; |
| break; |
| } |
| } |
| for (var i$__11 = ilen - 1; i$__11 >= 0; i$__11--) { |
| var s$__12 = this.wot.wtTable.rowFilter.renderedToSource(i$__11); |
| if (s$__12 >= corners[0] && s$__12 <= corners[2]) { |
| toRow = s$__12; |
| break; |
| } |
| } |
| ilen = this.wot.wtTable.getRenderedColumnsCount(); |
| for (var i$__13 = 0; i$__13 < ilen; i$__13++) { |
| var s$__14 = this.wot.wtTable.columnFilter.renderedToSource(i$__13); |
| if (s$__14 >= corners[1] && s$__14 <= corners[3]) { |
| fromColumn = s$__14; |
| break; |
| } |
| } |
| for (var i$__15 = ilen - 1; i$__15 >= 0; i$__15--) { |
| var s$__16 = this.wot.wtTable.columnFilter.renderedToSource(i$__15); |
| if (s$__16 >= corners[1] && s$__16 <= corners[3]) { |
| toColumn = s$__16; |
| break; |
| } |
| } |
| if (fromRow === void 0 || fromColumn === void 0) { |
| this.disappear(); |
| return; |
| } |
| isMultiple = (fromRow !== toRow || fromColumn !== toColumn); |
| fromTD = this.wot.wtTable.getCell(new WalkontableCellCoords(fromRow, fromColumn)); |
| toTD = isMultiple ? this.wot.wtTable.getCell(new WalkontableCellCoords(toRow, toColumn)) : fromTD; |
| fromOffset = offset(fromTD); |
| toOffset = isMultiple ? offset(toTD) : fromOffset; |
| containerOffset = offset(this.wot.wtTable.TABLE); |
| minTop = fromOffset.top; |
| height = toOffset.top + outerHeight(toTD) - minTop; |
| minLeft = fromOffset.left; |
| width = toOffset.left + outerWidth(toTD) - minLeft; |
| top = minTop - containerOffset.top - 1; |
| left = minLeft - containerOffset.left - 1; |
| var style = getComputedStyle(fromTD); |
| if (parseInt(style.borderTopWidth, 10) > 0) { |
| top += 1; |
| height = height > 0 ? height - 1 : 0; |
| } |
| if (parseInt(style.borderLeftWidth, 10) > 0) { |
| left += 1; |
| width = width > 0 ? width - 1 : 0; |
| } |
| this.topStyle.top = top + 'px'; |
| this.topStyle.left = left + 'px'; |
| this.topStyle.width = width + 'px'; |
| this.topStyle.display = 'block'; |
| this.leftStyle.top = top + 'px'; |
| this.leftStyle.left = left + 'px'; |
| this.leftStyle.height = height + 'px'; |
| this.leftStyle.display = 'block'; |
| var delta = Math.floor(this.settings.border.width / 2); |
| this.bottomStyle.top = top + height - delta + 'px'; |
| this.bottomStyle.left = left + 'px'; |
| this.bottomStyle.width = width + 'px'; |
| this.bottomStyle.display = 'block'; |
| this.rightStyle.top = top + 'px'; |
| this.rightStyle.left = left + width - delta + 'px'; |
| this.rightStyle.height = height + 1 + 'px'; |
| this.rightStyle.display = 'block'; |
| if (isMobileBrowser() || (!this.hasSetting(this.settings.border.cornerVisible) || this.isPartRange(toRow, toColumn))) { |
| this.cornerStyle.display = 'none'; |
| } else { |
| this.cornerStyle.top = top + height - 4 + 'px'; |
| this.cornerStyle.left = left + width - 4 + 'px'; |
| this.cornerStyle.borderRightWidth = this.cornerDefaultStyle.borderWidth; |
| this.cornerStyle.width = this.cornerDefaultStyle.width; |
| this.cornerStyle.display = 'block'; |
| trimmingContainer = getTrimmingContainer(this.wot.wtTable.TABLE); |
| if (toColumn === this.wot.getSetting('totalColumns') - 1) { |
| cornerOverlappingContainer = toTD.offsetLeft + outerWidth(toTD) >= innerWidth(trimmingContainer); |
| if (cornerOverlappingContainer) { |
| this.cornerStyle.left = Math.floor(left + width - 3 - parseInt(this.cornerDefaultStyle.width) / 2) + 'px'; |
| this.cornerStyle.borderRightWidth = 0; |
| } |
| } |
| if (toRow === this.wot.getSetting('totalRows') - 1) { |
| cornerOverlappingContainer = toTD.offsetTop + outerHeight(toTD) >= innerHeight(trimmingContainer); |
| if (cornerOverlappingContainer) { |
| this.cornerStyle.top = Math.floor(top + height - 3 - parseInt(this.cornerDefaultStyle.height) / 2) + 'px'; |
| this.cornerStyle.borderBottomWidth = 0; |
| } |
| } |
| } |
| if (isMobileBrowser()) { |
| this.updateMultipleSelectionHandlesPosition(fromRow, fromColumn, top, left, width, height); |
| } |
| }, |
| disappear: function() { |
| this.topStyle.display = 'none'; |
| this.leftStyle.display = 'none'; |
| this.bottomStyle.display = 'none'; |
| this.rightStyle.display = 'none'; |
| this.cornerStyle.display = 'none'; |
| if (isMobileBrowser()) { |
| this.selectionHandles.styles.topLeft.display = 'none'; |
| this.selectionHandles.styles.bottomRight.display = 'none'; |
| } |
| }, |
| hasSetting: function(setting) { |
| if (typeof setting === 'function') { |
| return setting(); |
| } |
| return !!setting; |
| } |
| }, {}); |
| ; |
| window.WalkontableBorder = WalkontableBorder; |
| |
| //# |
| },{"cell/coords":6,"eventManager":42,"helpers/browser":44,"helpers/dom/element":47,"helpers/dom/event":48,"overlay/_base.js":12}],4:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableViewportColumnsCalculator: {get: function() { |
| return WalkontableViewportColumnsCalculator; |
| }}, |
| __esModule: {value: true} |
| }); |
| var privatePool = new WeakMap(); |
| var WalkontableViewportColumnsCalculator = function WalkontableViewportColumnsCalculator(viewportWidth, scrollOffset, totalColumns, columnWidthFn, overrideFn, onlyFullyVisible, stretchH) { |
| var stretchingColumnWidthFn = arguments[7] !== (void 0) ? arguments[7] : (function(width) { |
| return width; |
| }); |
| privatePool.set(this, { |
| viewportWidth: viewportWidth, |
| scrollOffset: scrollOffset, |
| totalColumns: totalColumns, |
| columnWidthFn: columnWidthFn, |
| overrideFn: overrideFn, |
| onlyFullyVisible: onlyFullyVisible, |
| stretchingColumnWidthFn: stretchingColumnWidthFn |
| }); |
| this.count = 0; |
| this.startColumn = null; |
| this.endColumn = null; |
| this.startPosition = null; |
| this.stretchAllRatio = 0; |
| this.stretchLastWidth = 0; |
| this.stretch = stretchH; |
| this.totalTargetWidth = 0; |
| this.needVerifyLastColumnWidth = true; |
| this.stretchAllColumnsWidth = []; |
| this.calculate(); |
| }; |
| var $WalkontableViewportColumnsCalculator = WalkontableViewportColumnsCalculator; |
| ($traceurRuntime.createClass)(WalkontableViewportColumnsCalculator, { |
| calculate: function() { |
| var sum = 0; |
| var needReverse = true; |
| var startPositions = []; |
| var columnWidth; |
| var priv = privatePool.get(this); |
| var onlyFullyVisible = priv.onlyFullyVisible; |
| var overrideFn = priv.overrideFn; |
| var scrollOffset = priv.scrollOffset; |
| var totalColumns = priv.totalColumns; |
| var viewportWidth = priv.viewportWidth; |
| for (var i = 0; i < totalColumns; i++) { |
| columnWidth = this._getColumnWidth(i); |
| if (sum <= scrollOffset && !onlyFullyVisible) { |
| this.startColumn = i; |
| } |
| if (sum >= scrollOffset && sum + columnWidth <= scrollOffset + viewportWidth) { |
| if (this.startColumn == null) { |
| this.startColumn = i; |
| } |
| this.endColumn = i; |
| } |
| startPositions.push(sum); |
| sum += columnWidth; |
| if (!onlyFullyVisible) { |
| this.endColumn = i; |
| } |
| if (sum >= scrollOffset + viewportWidth) { |
| needReverse = false; |
| break; |
| } |
| } |
| if (this.endColumn === totalColumns - 1 && needReverse) { |
| this.startColumn = this.endColumn; |
| while (this.startColumn > 0) { |
| var viewportSum = startPositions[this.endColumn] + columnWidth - startPositions[this.startColumn - 1]; |
| if (viewportSum <= viewportWidth || !onlyFullyVisible) { |
| this.startColumn--; |
| } |
| if (viewportSum > viewportWidth) { |
| break; |
| } |
| } |
| } |
| if (this.startColumn !== null && overrideFn) { |
| overrideFn(this); |
| } |
| this.startPosition = startPositions[this.startColumn]; |
| if (this.startPosition == void 0) { |
| this.startPosition = null; |
| } |
| if (this.startColumn !== null) { |
| this.count = this.endColumn - this.startColumn + 1; |
| } |
| }, |
| refreshStretching: function(totalWidth) { |
| if (this.stretch === 'none') { |
| return; |
| } |
| this.totalTargetWidth = totalWidth; |
| var priv = privatePool.get(this); |
| var totalColumns = priv.totalColumns; |
| var sumAll = 0; |
| for (var i = 0; i < totalColumns; i++) { |
| var columnWidth = this._getColumnWidth(i); |
| var permanentColumnWidth = priv.stretchingColumnWidthFn(void 0, i); |
| if (typeof permanentColumnWidth === 'number') { |
| totalWidth -= permanentColumnWidth; |
| } else { |
| sumAll += columnWidth; |
| } |
| } |
| var remainingSize = totalWidth - sumAll; |
| if (this.stretch === 'all' && remainingSize > 0) { |
| this.stretchAllRatio = totalWidth / sumAll; |
| this.stretchAllColumnsWidth = []; |
| this.needVerifyLastColumnWidth = true; |
| } else if (this.stretch === 'last' && totalWidth !== Infinity) { |
| var columnWidth$__1 = this._getColumnWidth(totalColumns - 1); |
| var lastColumnWidth = remainingSize + columnWidth$__1; |
| this.stretchLastWidth = lastColumnWidth >= 0 ? lastColumnWidth : columnWidth$__1; |
| } |
| }, |
| getStretchedColumnWidth: function(column, baseWidth) { |
| var result = null; |
| if (this.stretch === 'all' && this.stretchAllRatio !== 0) { |
| result = this._getStretchedAllColumnWidth(column, baseWidth); |
| } else if (this.stretch === 'last' && this.stretchLastWidth !== 0) { |
| result = this._getStretchedLastColumnWidth(column); |
| } |
| return result; |
| }, |
| _getStretchedAllColumnWidth: function(column, baseWidth) { |
| var sumRatioWidth = 0; |
| var priv = privatePool.get(this); |
| var totalColumns = priv.totalColumns; |
| if (!this.stretchAllColumnsWidth[column]) { |
| var stretchedWidth = Math.round(baseWidth * this.stretchAllRatio); |
| var newStretchedWidth = priv.stretchingColumnWidthFn(stretchedWidth, column); |
| if (newStretchedWidth === void 0) { |
| this.stretchAllColumnsWidth[column] = stretchedWidth; |
| } else { |
| this.stretchAllColumnsWidth[column] = isNaN(newStretchedWidth) ? this._getColumnWidth(column) : newStretchedWidth; |
| } |
| } |
| if (this.stretchAllColumnsWidth.length === totalColumns && this.needVerifyLastColumnWidth) { |
| this.needVerifyLastColumnWidth = false; |
| for (var i = 0; i < this.stretchAllColumnsWidth.length; i++) { |
| sumRatioWidth += this.stretchAllColumnsWidth[i]; |
| } |
| if (sumRatioWidth !== this.totalTargetWidth) { |
| this.stretchAllColumnsWidth[this.stretchAllColumnsWidth.length - 1] += this.totalTargetWidth - sumRatioWidth; |
| } |
| } |
| return this.stretchAllColumnsWidth[column]; |
| }, |
| _getStretchedLastColumnWidth: function(column) { |
| var priv = privatePool.get(this); |
| var totalColumns = priv.totalColumns; |
| if (column === totalColumns - 1) { |
| return this.stretchLastWidth; |
| } |
| return null; |
| }, |
| _getColumnWidth: function(column) { |
| var width = privatePool.get(this).columnWidthFn(column); |
| if (width === void 0) { |
| width = $WalkontableViewportColumnsCalculator.DEFAULT_WIDTH; |
| } |
| return width; |
| } |
| }, {get DEFAULT_WIDTH() { |
| return 50; |
| }}); |
| ; |
| window.WalkontableViewportColumnsCalculator = WalkontableViewportColumnsCalculator; |
| |
| //# |
| },{}],5:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableViewportRowsCalculator: {get: function() { |
| return WalkontableViewportRowsCalculator; |
| }}, |
| __esModule: {value: true} |
| }); |
| var privatePool = new WeakMap(); |
| var WalkontableViewportRowsCalculator = function WalkontableViewportRowsCalculator(viewportHeight, scrollOffset, totalRows, rowHeightFn, overrideFn, onlyFullyVisible, horizontalScrollbarHeight) { |
| privatePool.set(this, { |
| viewportHeight: viewportHeight, |
| scrollOffset: scrollOffset, |
| totalRows: totalRows, |
| rowHeightFn: rowHeightFn, |
| overrideFn: overrideFn, |
| onlyFullyVisible: onlyFullyVisible, |
| horizontalScrollbarHeight: horizontalScrollbarHeight |
| }); |
| this.count = 0; |
| this.startRow = null; |
| this.endRow = null; |
| this.startPosition = null; |
| this.calculate(); |
| }; |
| var $WalkontableViewportRowsCalculator = WalkontableViewportRowsCalculator; |
| ($traceurRuntime.createClass)(WalkontableViewportRowsCalculator, {calculate: function() { |
| var sum = 0; |
| var needReverse = true; |
| var startPositions = []; |
| var priv = privatePool.get(this); |
| var onlyFullyVisible = priv.onlyFullyVisible; |
| var overrideFn = priv.overrideFn; |
| var rowHeightFn = priv.rowHeightFn; |
| var scrollOffset = priv.scrollOffset; |
| var totalRows = priv.totalRows; |
| var viewportHeight = priv.viewportHeight; |
| var horizontalScrollbarHeight = priv.horizontalScrollbarHeight || 0; |
| for (var i = 0; i < totalRows; i++) { |
| var rowHeight = rowHeightFn(i); |
| if (rowHeight === undefined) { |
| rowHeight = $WalkontableViewportRowsCalculator.DEFAULT_HEIGHT; |
| } |
| if (sum <= scrollOffset && !onlyFullyVisible) { |
| this.startRow = i; |
| } |
| if (sum >= scrollOffset && sum + rowHeight <= scrollOffset + viewportHeight - horizontalScrollbarHeight) { |
| if (this.startRow === null) { |
| this.startRow = i; |
| } |
| this.endRow = i; |
| } |
| startPositions.push(sum); |
| sum += rowHeight; |
| if (!onlyFullyVisible) { |
| this.endRow = i; |
| } |
| if (sum >= scrollOffset + viewportHeight - horizontalScrollbarHeight) { |
| needReverse = false; |
| break; |
| } |
| } |
| if (this.endRow === totalRows - 1 && needReverse) { |
| this.startRow = this.endRow; |
| while (this.startRow > 0) { |
| var viewportSum = startPositions[this.endRow] + rowHeight - startPositions[this.startRow - 1]; |
| if (viewportSum <= viewportHeight - horizontalScrollbarHeight || !onlyFullyVisible) { |
| this.startRow--; |
| } |
| if (viewportSum >= viewportHeight - horizontalScrollbarHeight) { |
| break; |
| } |
| } |
| } |
| if (this.startRow !== null && overrideFn) { |
| overrideFn(this); |
| } |
| this.startPosition = startPositions[this.startRow]; |
| if (this.startPosition == void 0) { |
| this.startPosition = null; |
| } |
| if (this.startRow !== null) { |
| this.count = this.endRow - this.startRow + 1; |
| } |
| }}, {get DEFAULT_HEIGHT() { |
| return 23; |
| }}); |
| ; |
| window.WalkontableViewportRowsCalculator = WalkontableViewportRowsCalculator; |
| |
| //# |
| },{}],6:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableCellCoords: {get: function() { |
| return WalkontableCellCoords; |
| }}, |
| __esModule: {value: true} |
| }); |
| var WalkontableCellCoords = function WalkontableCellCoords(row, col) { |
| if (typeof row !== 'undefined' && typeof col !== 'undefined') { |
| this.row = row; |
| this.col = col; |
| } else { |
| this.row = null; |
| this.col = null; |
| } |
| }; |
| ($traceurRuntime.createClass)(WalkontableCellCoords, { |
| isValid: function(wotInstance) { |
| if (this.row < 0 || this.col < 0) { |
| return false; |
| } |
| if (this.row >= wotInstance.getSetting('totalRows') || this.col >= wotInstance.getSetting('totalColumns')) { |
| return false; |
| } |
| return true; |
| }, |
| isEqual: function(cellCoords) { |
| if (cellCoords === this) { |
| return true; |
| } |
| return this.row === cellCoords.row && this.col === cellCoords.col; |
| }, |
| isSouthEastOf: function(testedCoords) { |
| return this.row >= testedCoords.row && this.col >= testedCoords.col; |
| }, |
| isNorthWestOf: function(testedCoords) { |
| return this.row <= testedCoords.row && this.col <= testedCoords.col; |
| }, |
| isSouthWestOf: function(testedCoords) { |
| return this.row >= testedCoords.row && this.col <= testedCoords.col; |
| }, |
| isNorthEastOf: function(testedCoords) { |
| return this.row <= testedCoords.row && this.col >= testedCoords.col; |
| } |
| }, {}); |
| ; |
| window.WalkontableCellCoords = WalkontableCellCoords; |
| |
| //# |
| },{}],7:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableCellRange: {get: function() { |
| return WalkontableCellRange; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_cell_47_coords__; |
| var WalkontableCellCoords = ($___46__46__47_cell_47_coords__ = _dereq_("cell/coords"), $___46__46__47_cell_47_coords__ && $___46__46__47_cell_47_coords__.__esModule && $___46__46__47_cell_47_coords__ || {default: $___46__46__47_cell_47_coords__}).WalkontableCellCoords; |
| var WalkontableCellRange = function WalkontableCellRange(highlight, from, to) { |
| this.highlight = highlight; |
| this.from = from; |
| this.to = to; |
| }; |
| var $WalkontableCellRange = WalkontableCellRange; |
| ($traceurRuntime.createClass)(WalkontableCellRange, { |
| isValid: function(wotInstance) { |
| return this.from.isValid(wotInstance) && this.to.isValid(wotInstance); |
| }, |
| isSingle: function() { |
| return this.from.row === this.to.row && this.from.col === this.to.col; |
| }, |
| getHeight: function() { |
| return Math.max(this.from.row, this.to.row) - Math.min(this.from.row, this.to.row) + 1; |
| }, |
| getWidth: function() { |
| return Math.max(this.from.col, this.to.col) - Math.min(this.from.col, this.to.col) + 1; |
| }, |
| includes: function(cellCoords) { |
| var $__2 = cellCoords, |
| row = $__2.row, |
| col = $__2.col; |
| var topLeft = this.getTopLeftCorner(); |
| var bottomRight = this.getBottomRightCorner(); |
| return topLeft.row <= row && bottomRight.row >= row && topLeft.col <= col && bottomRight.col >= col; |
| }, |
| includesRange: function(testedRange) { |
| return this.includes(testedRange.getTopLeftCorner()) && this.includes(testedRange.getBottomRightCorner()); |
| }, |
| isEqual: function(testedRange) { |
| return (Math.min(this.from.row, this.to.row) == Math.min(testedRange.from.row, testedRange.to.row)) && (Math.max(this.from.row, this.to.row) == Math.max(testedRange.from.row, testedRange.to.row)) && (Math.min(this.from.col, this.to.col) == Math.min(testedRange.from.col, testedRange.to.col)) && (Math.max(this.from.col, this.to.col) == Math.max(testedRange.from.col, testedRange.to.col)); |
| }, |
| overlaps: function(testedRange) { |
| return testedRange.isSouthEastOf(this.getTopLeftCorner()) && testedRange.isNorthWestOf(this.getBottomRightCorner()); |
| }, |
| isSouthEastOf: function(testedCoords) { |
| return this.getTopLeftCorner().isSouthEastOf(testedCoords) || this.getBottomRightCorner().isSouthEastOf(testedCoords); |
| }, |
| isNorthWestOf: function(testedCoords) { |
| return this.getTopLeftCorner().isNorthWestOf(testedCoords) || this.getBottomRightCorner().isNorthWestOf(testedCoords); |
| }, |
| expand: function(cellCoords) { |
| var topLeft = this.getTopLeftCorner(); |
| var bottomRight = this.getBottomRightCorner(); |
| if (cellCoords.row < topLeft.row || cellCoords.col < topLeft.col || cellCoords.row > bottomRight.row || cellCoords.col > bottomRight.col) { |
| this.from = new WalkontableCellCoords(Math.min(topLeft.row, cellCoords.row), Math.min(topLeft.col, cellCoords.col)); |
| this.to = new WalkontableCellCoords(Math.max(bottomRight.row, cellCoords.row), Math.max(bottomRight.col, cellCoords.col)); |
| return true; |
| } |
| return false; |
| }, |
| expandByRange: function(expandingRange) { |
| if (this.includesRange(expandingRange) || !this.overlaps(expandingRange)) { |
| return false; |
| } |
| var topLeft = this.getTopLeftCorner(); |
| var bottomRight = this.getBottomRightCorner(); |
| var topRight = this.getTopRightCorner(); |
| var bottomLeft = this.getBottomLeftCorner(); |
| var expandingTopLeft = expandingRange.getTopLeftCorner(); |
| var expandingBottomRight = expandingRange.getBottomRightCorner(); |
| var resultTopRow = Math.min(topLeft.row, expandingTopLeft.row); |
| var resultTopCol = Math.min(topLeft.col, expandingTopLeft.col); |
| var resultBottomRow = Math.max(bottomRight.row, expandingBottomRight.row); |
| var resultBottomCol = Math.max(bottomRight.col, expandingBottomRight.col); |
| var finalFrom = new WalkontableCellCoords(resultTopRow, resultTopCol), |
| finalTo = new WalkontableCellCoords(resultBottomRow, resultBottomCol); |
| var isCorner = new $WalkontableCellRange(finalFrom, finalFrom, finalTo).isCorner(this.from, expandingRange), |
| onlyMerge = expandingRange.isEqual(new $WalkontableCellRange(finalFrom, finalFrom, finalTo)); |
| if (isCorner && !onlyMerge) { |
| if (this.from.col > finalFrom.col) { |
| finalFrom.col = resultBottomCol; |
| finalTo.col = resultTopCol; |
| } |
| if (this.from.row > finalFrom.row) { |
| finalFrom.row = resultBottomRow; |
| finalTo.row = resultTopRow; |
| } |
| } |
| this.from = finalFrom; |
| this.to = finalTo; |
| return true; |
| }, |
| getDirection: function() { |
| if (this.from.isNorthWestOf(this.to)) { |
| return 'NW-SE'; |
| } else if (this.from.isNorthEastOf(this.to)) { |
| return 'NE-SW'; |
| } else if (this.from.isSouthEastOf(this.to)) { |
| return 'SE-NW'; |
| } else if (this.from.isSouthWestOf(this.to)) { |
| return 'SW-NE'; |
| } |
| }, |
| setDirection: function(direction) { |
| switch (direction) { |
| case 'NW-SE': |
| this.from = this.getTopLeftCorner(); |
| this.to = this.getBottomRightCorner(); |
| break; |
| case 'NE-SW': |
| this.from = this.getTopRightCorner(); |
| this.to = this.getBottomLeftCorner(); |
| break; |
| case 'SE-NW': |
| this.from = this.getBottomRightCorner(); |
| this.to = this.getTopLeftCorner(); |
| break; |
| case 'SW-NE': |
| this.from = this.getBottomLeftCorner(); |
| this.to = this.getTopRightCorner(); |
| break; |
| } |
| }, |
| getTopLeftCorner: function() { |
| return new WalkontableCellCoords(Math.min(this.from.row, this.to.row), Math.min(this.from.col, this.to.col)); |
| }, |
| getBottomRightCorner: function() { |
| return new WalkontableCellCoords(Math.max(this.from.row, this.to.row), Math.max(this.from.col, this.to.col)); |
| }, |
| getTopRightCorner: function() { |
| return new WalkontableCellCoords(Math.min(this.from.row, this.to.row), Math.max(this.from.col, this.to.col)); |
| }, |
| getBottomLeftCorner: function() { |
| return new WalkontableCellCoords(Math.max(this.from.row, this.to.row), Math.min(this.from.col, this.to.col)); |
| }, |
| isCorner: function(coords, expandedRange) { |
| if (expandedRange) { |
| if (expandedRange.includes(coords)) { |
| if (this.getTopLeftCorner().isEqual(new WalkontableCellCoords(expandedRange.from.row, expandedRange.from.col)) || this.getTopRightCorner().isEqual(new WalkontableCellCoords(expandedRange.from.row, expandedRange.to.col)) || this.getBottomLeftCorner().isEqual(new WalkontableCellCoords(expandedRange.to.row, expandedRange.from.col)) || this.getBottomRightCorner().isEqual(new WalkontableCellCoords(expandedRange.to.row, expandedRange.to.col))) { |
| return true; |
| } |
| } |
| } |
| return coords.isEqual(this.getTopLeftCorner()) || coords.isEqual(this.getTopRightCorner()) || coords.isEqual(this.getBottomLeftCorner()) || coords.isEqual(this.getBottomRightCorner()); |
| }, |
| getOppositeCorner: function(coords, expandedRange) { |
| if (!(coords instanceof WalkontableCellCoords)) { |
| return false; |
| } |
| if (expandedRange) { |
| if (expandedRange.includes(coords)) { |
| if (this.getTopLeftCorner().isEqual(new WalkontableCellCoords(expandedRange.from.row, expandedRange.from.col))) { |
| return this.getBottomRightCorner(); |
| } |
| if (this.getTopRightCorner().isEqual(new WalkontableCellCoords(expandedRange.from.row, expandedRange.to.col))) { |
| return this.getBottomLeftCorner(); |
| } |
| if (this.getBottomLeftCorner().isEqual(new WalkontableCellCoords(expandedRange.to.row, expandedRange.from.col))) { |
| return this.getTopRightCorner(); |
| } |
| if (this.getBottomRightCorner().isEqual(new WalkontableCellCoords(expandedRange.to.row, expandedRange.to.col))) { |
| return this.getTopLeftCorner(); |
| } |
| } |
| } |
| if (coords.isEqual(this.getBottomRightCorner())) { |
| return this.getTopLeftCorner(); |
| } else if (coords.isEqual(this.getTopLeftCorner())) { |
| return this.getBottomRightCorner(); |
| } else if (coords.isEqual(this.getTopRightCorner())) { |
| return this.getBottomLeftCorner(); |
| } else if (coords.isEqual(this.getBottomLeftCorner())) { |
| return this.getTopRightCorner(); |
| } |
| }, |
| getBordersSharedWith: function(range) { |
| if (!this.includesRange(range)) { |
| return []; |
| } |
| var thisBorders = { |
| top: Math.min(this.from.row, this.to.row), |
| bottom: Math.max(this.from.row, this.to.row), |
| left: Math.min(this.from.col, this.to.col), |
| right: Math.max(this.from.col, this.to.col) |
| }; |
| var rangeBorders = { |
| top: Math.min(range.from.row, range.to.row), |
| bottom: Math.max(range.from.row, range.to.row), |
| left: Math.min(range.from.col, range.to.col), |
| right: Math.max(range.from.col, range.to.col) |
| }; |
| var result = []; |
| if (thisBorders.top == rangeBorders.top) { |
| result.push('top'); |
| } |
| if (thisBorders.right == rangeBorders.right) { |
| result.push('right'); |
| } |
| if (thisBorders.bottom == rangeBorders.bottom) { |
| result.push('bottom'); |
| } |
| if (thisBorders.left == rangeBorders.left) { |
| result.push('left'); |
| } |
| return result; |
| }, |
| getInner: function() { |
| var topLeft = this.getTopLeftCorner(); |
| var bottomRight = this.getBottomRightCorner(); |
| var out = []; |
| for (var r = topLeft.row; r <= bottomRight.row; r++) { |
| for (var c = topLeft.col; c <= bottomRight.col; c++) { |
| if (!(this.from.row === r && this.from.col === c) && !(this.to.row === r && this.to.col === c)) { |
| out.push(new WalkontableCellCoords(r, c)); |
| } |
| } |
| } |
| return out; |
| }, |
| getAll: function() { |
| var topLeft = this.getTopLeftCorner(); |
| var bottomRight = this.getBottomRightCorner(); |
| var out = []; |
| for (var r = topLeft.row; r <= bottomRight.row; r++) { |
| for (var c = topLeft.col; c <= bottomRight.col; c++) { |
| if (topLeft.row === r && topLeft.col === c) { |
| out.push(topLeft); |
| } else if (bottomRight.row === r && bottomRight.col === c) { |
| out.push(bottomRight); |
| } else { |
| out.push(new WalkontableCellCoords(r, c)); |
| } |
| } |
| } |
| return out; |
| }, |
| forAll: function(callback) { |
| var topLeft = this.getTopLeftCorner(); |
| var bottomRight = this.getBottomRightCorner(); |
| for (var r = topLeft.row; r <= bottomRight.row; r++) { |
| for (var c = topLeft.col; c <= bottomRight.col; c++) { |
| var breakIteration = callback(r, c); |
| if (breakIteration === false) { |
| return; |
| } |
| } |
| } |
| } |
| }, {}); |
| ; |
| window.WalkontableCellRange = WalkontableCellRange; |
| |
| //# |
| },{"cell/coords":6}],8:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| Walkontable: {get: function() { |
| return Walkontable; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47__46__46__47_helpers_47_object__, |
| $___46__46__47__46__46__47__46__46__47_helpers_47_string__, |
| $__event__, |
| $__overlays__, |
| $__scroll__, |
| $__settings__, |
| $__table__, |
| $__viewport__, |
| $__overlay_47__95_base_46_js__, |
| $__overlay_47_top_46_js__, |
| $__overlay_47_left_46_js__, |
| $__overlay_47_debug_46_js__, |
| $__overlay_47_topLeftCorner_46_js__; |
| var $__0 = ($___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__0.addClass, |
| fastInnerText = $__0.fastInnerText, |
| isVisible = $__0.isVisible, |
| removeClass = $__0.removeClass; |
| var objectEach = ($___46__46__47__46__46__47__46__46__47_helpers_47_object__ = _dereq_("helpers/object"), $___46__46__47__46__46__47__46__46__47_helpers_47_object__ && $___46__46__47__46__46__47__46__46__47_helpers_47_object__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_object__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_object__}).objectEach; |
| var $__2 = ($___46__46__47__46__46__47__46__46__47_helpers_47_string__ = _dereq_("helpers/string"), $___46__46__47__46__46__47__46__46__47_helpers_47_string__ && $___46__46__47__46__46__47__46__46__47_helpers_47_string__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_string__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_string__}), |
| toUpperCaseFirst = $__2.toUpperCaseFirst, |
| randomString = $__2.randomString; |
| var WalkontableEvent = ($__event__ = _dereq_("event"), $__event__ && $__event__.__esModule && $__event__ || {default: $__event__}).WalkontableEvent; |
| var WalkontableOverlays = ($__overlays__ = _dereq_("overlays"), $__overlays__ && $__overlays__.__esModule && $__overlays__ || {default: $__overlays__}).WalkontableOverlays; |
| var WalkontableScroll = ($__scroll__ = _dereq_("scroll"), $__scroll__ && $__scroll__.__esModule && $__scroll__ || {default: $__scroll__}).WalkontableScroll; |
| var WalkontableSettings = ($__settings__ = _dereq_("settings"), $__settings__ && $__settings__.__esModule && $__settings__ || {default: $__settings__}).WalkontableSettings; |
| var WalkontableTable = ($__table__ = _dereq_("table"), $__table__ && $__table__.__esModule && $__table__ || {default: $__table__}).WalkontableTable; |
| var WalkontableViewport = ($__viewport__ = _dereq_("viewport"), $__viewport__ && $__viewport__.__esModule && $__viewport__ || {default: $__viewport__}).WalkontableViewport; |
| var WalkontableOverlay = ($__overlay_47__95_base_46_js__ = _dereq_("overlay/_base.js"), $__overlay_47__95_base_46_js__ && $__overlay_47__95_base_46_js__.__esModule && $__overlay_47__95_base_46_js__ || {default: $__overlay_47__95_base_46_js__}).WalkontableOverlay; |
| var WalkontableTopOverlay = ($__overlay_47_top_46_js__ = _dereq_("overlay/top.js"), $__overlay_47_top_46_js__ && $__overlay_47_top_46_js__.__esModule && $__overlay_47_top_46_js__ || {default: $__overlay_47_top_46_js__}).WalkontableTopOverlay; |
| var WalkontableLeftOverlay = ($__overlay_47_left_46_js__ = _dereq_("overlay/left.js"), $__overlay_47_left_46_js__ && $__overlay_47_left_46_js__.__esModule && $__overlay_47_left_46_js__ || {default: $__overlay_47_left_46_js__}).WalkontableLeftOverlay; |
| var WalkontableDebugOverlay = ($__overlay_47_debug_46_js__ = _dereq_("overlay/debug.js"), $__overlay_47_debug_46_js__ && $__overlay_47_debug_46_js__.__esModule && $__overlay_47_debug_46_js__ || {default: $__overlay_47_debug_46_js__}).WalkontableDebugOverlay; |
| var WalkontableTopLeftCornerOverlay = ($__overlay_47_topLeftCorner_46_js__ = _dereq_("overlay/topLeftCorner.js"), $__overlay_47_topLeftCorner_46_js__ && $__overlay_47_topLeftCorner_46_js__.__esModule && $__overlay_47_topLeftCorner_46_js__ || {default: $__overlay_47_topLeftCorner_46_js__}).WalkontableTopLeftCornerOverlay; |
| var Walkontable = function Walkontable(settings) { |
| var originalHeaders = []; |
| this.guid = 'wt_' + randomString(); |
| if (settings.cloneSource) { |
| this.cloneSource = settings.cloneSource; |
| this.cloneOverlay = settings.cloneOverlay; |
| this.wtSettings = settings.cloneSource.wtSettings; |
| this.wtTable = new WalkontableTable(this, settings.table, settings.wtRootElement); |
| this.wtScroll = new WalkontableScroll(this); |
| this.wtViewport = settings.cloneSource.wtViewport; |
| this.wtEvent = new WalkontableEvent(this); |
| this.selections = this.cloneSource.selections; |
| } else { |
| this.wtSettings = new WalkontableSettings(this, settings); |
| this.wtTable = new WalkontableTable(this, settings.table); |
| this.wtScroll = new WalkontableScroll(this); |
| this.wtViewport = new WalkontableViewport(this); |
| this.wtEvent = new WalkontableEvent(this); |
| this.selections = this.getSetting('selections'); |
| this.wtOverlays = new WalkontableOverlays(this); |
| this.exportSettingsAsClassNames(); |
| } |
| if (this.wtTable.THEAD.childNodes.length && this.wtTable.THEAD.childNodes[0].childNodes.length) { |
| for (var c = 0, |
| clen = this.wtTable.THEAD.childNodes[0].childNodes.length; c < clen; c++) { |
| originalHeaders.push(this.wtTable.THEAD.childNodes[0].childNodes[c].innerHTML); |
| } |
| if (!this.getSetting('columnHeaders').length) { |
| this.update('columnHeaders', [function(column, TH) { |
| fastInnerText(TH, originalHeaders[column]); |
| }]); |
| } |
| } |
| this.drawn = false; |
| this.drawInterrupted = false; |
| }; |
| ($traceurRuntime.createClass)(Walkontable, { |
| draw: function() { |
| var fastDraw = arguments[0] !== (void 0) ? arguments[0] : false; |
| this.drawInterrupted = false; |
| if (!fastDraw && !isVisible(this.wtTable.TABLE)) { |
| this.drawInterrupted = true; |
| } else { |
| this.wtTable.draw(fastDraw); |
| } |
| return this; |
| }, |
| getCell: function(coords) { |
| var topmost = arguments[1] !== (void 0) ? arguments[1] : false; |
| if (!topmost) { |
| return this.wtTable.getCell(coords); |
| } |
| var totalRows = this.wtSettings.getSetting('totalRows'); |
| var fixedRowsTop = this.wtSettings.getSetting('fixedRowsTop'); |
| var fixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom'); |
| var fixedColumns = this.wtSettings.getSetting('fixedColumnsLeft'); |
| if (coords.row < fixedRowsTop && coords.col < fixedColumns) { |
| return this.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell(coords); |
| } else if (coords.row < fixedRowsTop) { |
| return this.wtOverlays.topOverlay.clone.wtTable.getCell(coords); |
| } else if (coords.col < fixedColumns && coords.row >= totalRows - fixedRowsBottom) { |
| if (this.wtOverlays.bottomLeftCornerOverlay.clone) { |
| return this.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.getCell(coords); |
| } |
| } else if (coords.col < fixedColumns) { |
| return this.wtOverlays.leftOverlay.clone.wtTable.getCell(coords); |
| } else if (coords.row < totalRows && coords.row > totalRows - fixedRowsBottom) { |
| if (this.wtOverlays.bottomOverlay.clone) { |
| return this.wtOverlays.bottomOverlay.clone.wtTable.getCell(coords); |
| } |
| } |
| return this.wtTable.getCell(coords); |
| }, |
| update: function(settings, value) { |
| return this.wtSettings.update(settings, value); |
| }, |
| scrollVertical: function(row) { |
| this.wtOverlays.topOverlay.scrollTo(row); |
| this.getSetting('onScrollVertically'); |
| return this; |
| }, |
| scrollHorizontal: function(column) { |
| this.wtOverlays.leftOverlay.scrollTo(column); |
| this.getSetting('onScrollHorizontally'); |
| return this; |
| }, |
| scrollViewport: function(coords) { |
| this.wtScroll.scrollViewport(coords); |
| return this; |
| }, |
| getViewport: function() { |
| return [this.wtTable.getFirstVisibleRow(), this.wtTable.getFirstVisibleColumn(), this.wtTable.getLastVisibleRow(), this.wtTable.getLastVisibleColumn()]; |
| }, |
| getOverlayName: function() { |
| return this.cloneOverlay ? this.cloneOverlay.type : 'master'; |
| }, |
| isOverlayName: function(name) { |
| if (this.cloneOverlay) { |
| return this.cloneOverlay.type === name; |
| } |
| return false; |
| }, |
| exportSettingsAsClassNames: function() { |
| var $__14 = this; |
| var toExport = { |
| rowHeaders: ['array'], |
| columnHeaders: ['array'] |
| }; |
| var allClassNames = []; |
| var newClassNames = []; |
| objectEach(toExport, (function(optionType, key) { |
| if (optionType.indexOf('array') > -1 && $__14.getSetting(key).length) { |
| newClassNames.push('ht' + toUpperCaseFirst(key)); |
| } |
| allClassNames.push('ht' + toUpperCaseFirst(key)); |
| })); |
| removeClass(this.wtTable.wtRootElement.parentNode, allClassNames); |
| addClass(this.wtTable.wtRootElement.parentNode, newClassNames); |
| }, |
| getSetting: function(key, param1, param2, param3, param4) { |
| return this.wtSettings.getSetting(key, param1, param2, param3, param4); |
| }, |
| hasSetting: function(key) { |
| return this.wtSettings.has(key); |
| }, |
| destroy: function() { |
| this.wtOverlays.destroy(); |
| this.wtEvent.destroy(); |
| } |
| }, {}); |
| ; |
| window.Walkontable = Walkontable; |
| |
| //# |
| },{"event":9,"helpers/dom/element":47,"helpers/object":53,"helpers/string":55,"overlay/_base.js":12,"overlay/debug.js":13,"overlay/left.js":14,"overlay/top.js":15,"overlay/topLeftCorner.js":16,"overlays":17,"scroll":18,"settings":20,"table":21,"viewport":23}],9:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableEvent: {get: function() { |
| return WalkontableEvent; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47__46__46__47_helpers_47_browser__, |
| $___46__46__47__46__46__47__46__46__47_eventManager__; |
| var $__0 = ($___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| closestDown = $__0.closestDown, |
| hasClass = $__0.hasClass, |
| isChildOf = $__0.isChildOf; |
| var isMobileBrowser = ($___46__46__47__46__46__47__46__46__47_helpers_47_browser__ = _dereq_("helpers/browser"), $___46__46__47__46__46__47__46__46__47_helpers_47_browser__ && $___46__46__47__46__46__47__46__46__47_helpers_47_browser__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_browser__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_browser__}).isMobileBrowser; |
| var eventManagerObject = ($___46__46__47__46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47__46__46__47_eventManager__}).eventManager; |
| function WalkontableEvent(instance) { |
| var that = this; |
| var eventManager = eventManagerObject(instance); |
| this.instance = instance; |
| var dblClickOrigin = [null, null]; |
| this.dblClickTimeout = [null, null]; |
| var onMouseDown = function(event) { |
| var cell = that.parentCell(event.realTarget); |
| if (hasClass(event.realTarget, 'corner')) { |
| that.instance.getSetting('onCellCornerMouseDown', event, event.realTarget); |
| } else if (cell.TD) { |
| if (that.instance.hasSetting('onCellMouseDown')) { |
| that.instance.getSetting('onCellMouseDown', event, cell.coords, cell.TD, that.instance); |
| } |
| } |
| if (event.button !== 2) { |
| if (cell.TD) { |
| dblClickOrigin[0] = cell.TD; |
| clearTimeout(that.dblClickTimeout[0]); |
| that.dblClickTimeout[0] = setTimeout(function() { |
| dblClickOrigin[0] = null; |
| }, 1000); |
| } |
| } |
| }; |
| var onTouchMove = function(event) { |
| that.instance.touchMoving = true; |
| }; |
| var longTouchTimeout; |
| var onTouchStart = function(event) { |
| var container = this; |
| eventManager.addEventListener(this, 'touchmove', onTouchMove); |
| that.checkIfTouchMove = setTimeout(function() { |
| if (that.instance.touchMoving === true) { |
| that.instance.touchMoving = void 0; |
| eventManager.removeEventListener('touchmove', onTouchMove, false); |
| return; |
| } else { |
| onMouseDown(event); |
| } |
| }, 30); |
| }; |
| var onMouseOver = function(event) { |
| var table, |
| td, |
| mainWOT; |
| if (that.instance.hasSetting('onCellMouseOver')) { |
| table = that.instance.wtTable.TABLE; |
| td = closestDown(event.realTarget, ['TD', 'TH'], table); |
| mainWOT = that.instance.cloneSource || that.instance; |
| if (td && td !== mainWOT.lastMouseOver && isChildOf(td, table)) { |
| mainWOT.lastMouseOver = td; |
| that.instance.getSetting('onCellMouseOver', event, that.instance.wtTable.getCoords(td), td, that.instance); |
| } |
| } |
| }; |
| var onMouseUp = function(event) { |
| if (event.button !== 2) { |
| var cell = that.parentCell(event.realTarget); |
| if (cell.TD === dblClickOrigin[0] && cell.TD === dblClickOrigin[1]) { |
| if (hasClass(event.realTarget, 'corner')) { |
| that.instance.getSetting('onCellCornerDblClick', event, cell.coords, cell.TD, that.instance); |
| } else { |
| that.instance.getSetting('onCellDblClick', event, cell.coords, cell.TD, that.instance); |
| } |
| dblClickOrigin[0] = null; |
| dblClickOrigin[1] = null; |
| } else if (cell.TD === dblClickOrigin[0]) { |
| dblClickOrigin[1] = cell.TD; |
| clearTimeout(that.dblClickTimeout[1]); |
| that.dblClickTimeout[1] = setTimeout(function() { |
| dblClickOrigin[1] = null; |
| }, 500); |
| } |
| } |
| }; |
| var onTouchEnd = function(event) { |
| clearTimeout(longTouchTimeout); |
| event.preventDefault(); |
| onMouseUp(event); |
| }; |
| eventManager.addEventListener(this.instance.wtTable.holder, 'mousedown', onMouseDown); |
| eventManager.addEventListener(this.instance.wtTable.TABLE, 'mouseover', onMouseOver); |
| eventManager.addEventListener(this.instance.wtTable.holder, 'mouseup', onMouseUp); |
| if (this.instance.wtTable.holder.parentNode.parentNode && isMobileBrowser() && !that.instance.wtTable.isWorkingOnClone()) { |
| var classSelector = '.' + this.instance.wtTable.holder.parentNode.className.split(' ').join('.'); |
| eventManager.addEventListener(this.instance.wtTable.holder, 'touchstart', function(event) { |
| that.instance.touchApplied = true; |
| if (isChildOf(event.target, classSelector)) { |
| onTouchStart.call(event.target, event); |
| } |
| }); |
| eventManager.addEventListener(this.instance.wtTable.holder, 'touchend', function(event) { |
| that.instance.touchApplied = false; |
| if (isChildOf(event.target, classSelector)) { |
| onTouchEnd.call(event.target, event); |
| } |
| }); |
| if (!that.instance.momentumScrolling) { |
| that.instance.momentumScrolling = {}; |
| } |
| eventManager.addEventListener(this.instance.wtTable.holder, 'scroll', function(event) { |
| clearTimeout(that.instance.momentumScrolling._timeout); |
| if (!that.instance.momentumScrolling.ongoing) { |
| that.instance.getSetting('onBeforeTouchScroll'); |
| } |
| that.instance.momentumScrolling.ongoing = true; |
| that.instance.momentumScrolling._timeout = setTimeout(function() { |
| if (!that.instance.touchApplied) { |
| that.instance.momentumScrolling.ongoing = false; |
| that.instance.getSetting('onAfterMomentumScroll'); |
| } |
| }, 200); |
| }); |
| } |
| eventManager.addEventListener(window, 'resize', function() { |
| if (that.instance.getSetting('stretchH') !== 'none') { |
| that.instance.draw(); |
| } |
| }); |
| this.destroy = function() { |
| clearTimeout(this.dblClickTimeout[0]); |
| clearTimeout(this.dblClickTimeout[1]); |
| eventManager.destroy(); |
| }; |
| } |
| WalkontableEvent.prototype.parentCell = function(elem) { |
| var cell = {}; |
| var TABLE = this.instance.wtTable.TABLE; |
| var TD = closestDown(elem, ['TD', 'TH'], TABLE); |
| if (TD) { |
| cell.coords = this.instance.wtTable.getCoords(TD); |
| cell.TD = TD; |
| } else if (hasClass(elem, 'wtBorder') && hasClass(elem, 'current')) { |
| cell.coords = this.instance.selections.current.cellRange.highlight; |
| cell.TD = this.instance.wtTable.getCell(cell.coords); |
| } else if (hasClass(elem, 'wtBorder') && hasClass(elem, 'area')) { |
| if (this.instance.selections.area.cellRange) { |
| cell.coords = this.instance.selections.area.cellRange.to; |
| cell.TD = this.instance.wtTable.getCell(cell.coords); |
| } |
| } |
| return cell; |
| }; |
| ; |
| window.WalkontableEvent = WalkontableEvent; |
| |
| //# |
| },{"eventManager":42,"helpers/browser":44,"helpers/dom/element":47}],10:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableColumnFilter: {get: function() { |
| return WalkontableColumnFilter; |
| }}, |
| __esModule: {value: true} |
| }); |
| var WalkontableColumnFilter = function WalkontableColumnFilter(offset, total, countTH) { |
| this.offset = offset; |
| this.total = total; |
| this.countTH = countTH; |
| }; |
| ($traceurRuntime.createClass)(WalkontableColumnFilter, { |
| offsetted: function(index) { |
| return index + this.offset; |
| }, |
| unOffsetted: function(index) { |
| return index - this.offset; |
| }, |
| renderedToSource: function(index) { |
| return this.offsetted(index); |
| }, |
| sourceToRendered: function(index) { |
| return this.unOffsetted(index); |
| }, |
| offsettedTH: function(index) { |
| return index - this.countTH; |
| }, |
| unOffsettedTH: function(index) { |
| return index + this.countTH; |
| }, |
| visibleRowHeadedColumnToSourceColumn: function(index) { |
| return this.renderedToSource(this.offsettedTH(index)); |
| }, |
| sourceColumnToVisibleRowHeadedColumn: function(index) { |
| return this.unOffsettedTH(this.sourceToRendered(index)); |
| } |
| }, {}); |
| ; |
| window.WalkontableColumnFilter = WalkontableColumnFilter; |
| |
| //# |
| },{}],11:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableRowFilter: {get: function() { |
| return WalkontableRowFilter; |
| }}, |
| __esModule: {value: true} |
| }); |
| var WalkontableRowFilter = function WalkontableRowFilter(offset, total, countTH) { |
| this.offset = offset; |
| this.total = total; |
| this.countTH = countTH; |
| }; |
| ($traceurRuntime.createClass)(WalkontableRowFilter, { |
| offsetted: function(index) { |
| return index + this.offset; |
| }, |
| unOffsetted: function(index) { |
| return index - this.offset; |
| }, |
| renderedToSource: function(index) { |
| return this.offsetted(index); |
| }, |
| sourceToRendered: function(index) { |
| return this.unOffsetted(index); |
| }, |
| offsettedTH: function(index) { |
| return index - this.countTH; |
| }, |
| unOffsettedTH: function(index) { |
| return index + this.countTH; |
| }, |
| visibleColHeadedRowToSourceRow: function(index) { |
| return this.renderedToSource(this.offsettedTH(index)); |
| }, |
| sourceRowToVisibleColHeadedRow: function(index) { |
| return this.unOffsettedTH(this.sourceToRendered(index)); |
| } |
| }, {}); |
| ; |
| window.WalkontableRowFilter = WalkontableRowFilter; |
| |
| //# |
| },{}],12:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableOverlay: {get: function() { |
| return WalkontableOverlay; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_object__, |
| $___46__46__47__46__46__47__46__46__47__46__46__47_eventManager__; |
| var $__0 = ($___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| getScrollableElement = $__0.getScrollableElement, |
| getTrimmingContainer = $__0.getTrimmingContainer; |
| var defineGetter = ($___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_object__ = _dereq_("helpers/object"), $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_object__ && $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_object__.__esModule && $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_object__ || {default: $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_object__}).defineGetter; |
| var eventManagerObject = ($___46__46__47__46__46__47__46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47__46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47__46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47__46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47__46__46__47__46__46__47_eventManager__}).eventManager; |
| var registeredOverlays = {}; |
| var WalkontableOverlay = function WalkontableOverlay(wotInstance) { |
| defineGetter(this, 'wot', wotInstance, {writable: false}); |
| this.instance = this.wot; |
| this.type = ''; |
| this.mainTableScrollableElement = null; |
| this.TABLE = this.wot.wtTable.TABLE; |
| this.hider = this.wot.wtTable.hider; |
| this.spreader = this.wot.wtTable.spreader; |
| this.holder = this.wot.wtTable.holder; |
| this.wtRootElement = this.wot.wtTable.wtRootElement; |
| this.trimmingContainer = getTrimmingContainer(this.hider.parentNode.parentNode); |
| this.needFullRender = this.shouldBeRendered(); |
| this.areElementSizesAdjusted = false; |
| }; |
| var $WalkontableOverlay = WalkontableOverlay; |
| ($traceurRuntime.createClass)(WalkontableOverlay, { |
| shouldBeRendered: function() { |
| return true; |
| }, |
| updateTrimmingContainer: function() { |
| this.trimmingContainer = getTrimmingContainer(this.hider.parentNode.parentNode); |
| }, |
| updateMainScrollableElement: function() { |
| this.mainTableScrollableElement = getScrollableElement(this.wot.wtTable.TABLE); |
| }, |
| makeClone: function(direction) { |
| if ($WalkontableOverlay.CLONE_TYPES.indexOf(direction) === -1) { |
| throw new Error('Clone type "' + direction + '" is not supported.'); |
| } |
| var clone = document.createElement('DIV'); |
| var clonedTable = document.createElement('TABLE'); |
| clone.className = 'ht_clone_' + direction + ' handsontable'; |
| clone.style.position = 'absolute'; |
| clone.style.top = 0; |
| clone.style.left = 0; |
| clone.style.overflow = 'hidden'; |
| clonedTable.className = this.wot.wtTable.TABLE.className; |
| clone.appendChild(clonedTable); |
| this.type = direction; |
| this.wot.wtTable.wtRootElement.parentNode.appendChild(clone); |
| var preventOverflow = this.wot.getSetting('preventOverflow'); |
| if (preventOverflow === true || preventOverflow === 'horizontal' && this.type === $WalkontableOverlay.CLONE_TOP || preventOverflow === 'vertical' && this.type === $WalkontableOverlay.CLONE_LEFT) { |
| this.mainTableScrollableElement = window; |
| } else { |
| this.mainTableScrollableElement = getScrollableElement(this.wot.wtTable.TABLE); |
| } |
| return new Walkontable({ |
| cloneSource: this.wot, |
| cloneOverlay: this, |
| table: clonedTable |
| }); |
| }, |
| refresh: function() { |
| var fastDraw = arguments[0] !== (void 0) ? arguments[0] : false; |
| var nextCycleRenderFlag = this.shouldBeRendered(); |
| if (this.clone && (this.needFullRender || nextCycleRenderFlag)) { |
| this.clone.draw(fastDraw); |
| } |
| this.needFullRender = nextCycleRenderFlag; |
| }, |
| destroy: function() { |
| eventManagerObject(this.clone).destroy(); |
| } |
| }, { |
| get CLONE_TOP() { |
| return 'top'; |
| }, |
| get CLONE_BOTTOM() { |
| return 'bottom'; |
| }, |
| get CLONE_LEFT() { |
| return 'left'; |
| }, |
| get CLONE_TOP_LEFT_CORNER() { |
| return 'top_left_corner'; |
| }, |
| get CLONE_BOTTOM_LEFT_CORNER() { |
| return 'bottom_left_corner'; |
| }, |
| get CLONE_DEBUG() { |
| return 'debug'; |
| }, |
| get CLONE_TYPES() { |
| return [$WalkontableOverlay.CLONE_TOP, $WalkontableOverlay.CLONE_BOTTOM, $WalkontableOverlay.CLONE_LEFT, $WalkontableOverlay.CLONE_TOP_LEFT_CORNER, $WalkontableOverlay.CLONE_BOTTOM_LEFT_CORNER, $WalkontableOverlay.CLONE_DEBUG]; |
| }, |
| registerOverlay: function(type, overlayClass) { |
| if ($WalkontableOverlay.CLONE_TYPES.indexOf(type) === -1) { |
| throw new Error(("Unsupported overlay (" + type + ").")); |
| } |
| registeredOverlays[type] = overlayClass; |
| }, |
| createOverlay: function(type, wot) { |
| return new registeredOverlays[type](wot); |
| }, |
| isOverlayTypeOf: function(overlay, type) { |
| if (!overlay || !registeredOverlays[type]) { |
| return false; |
| } |
| return overlay instanceof registeredOverlays[type]; |
| } |
| }); |
| ; |
| window.WalkontableOverlay = WalkontableOverlay; |
| |
| //# |
| },{"eventManager":42,"helpers/dom/element":47,"helpers/object":53}],13:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableDebugOverlay: {get: function() { |
| return WalkontableDebugOverlay; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___95_base__; |
| var addClass = ($___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__}).addClass; |
| var WalkontableOverlay = ($___95_base__ = _dereq_("_base"), $___95_base__ && $___95_base__.__esModule && $___95_base__ || {default: $___95_base__}).WalkontableOverlay; |
| var WalkontableDebugOverlay = function WalkontableDebugOverlay(wotInstance) { |
| $traceurRuntime.superConstructor($WalkontableDebugOverlay).call(this, wotInstance); |
| this.clone = this.makeClone(WalkontableOverlay.CLONE_DEBUG); |
| this.clone.wtTable.holder.style.opacity = 0.4; |
| this.clone.wtTable.holder.style.textShadow = '0 0 2px #ff0000'; |
| addClass(this.clone.wtTable.holder.parentNode, 'wtDebugVisible'); |
| }; |
| var $WalkontableDebugOverlay = WalkontableDebugOverlay; |
| ($traceurRuntime.createClass)(WalkontableDebugOverlay, {}, {}, WalkontableOverlay); |
| ; |
| window.WalkontableDebugOverlay = WalkontableDebugOverlay; |
| WalkontableOverlay.registerOverlay(WalkontableOverlay.CLONE_DEBUG, WalkontableDebugOverlay); |
| |
| //# |
| },{"_base":12,"helpers/dom/element":47}],14:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableLeftOverlay: {get: function() { |
| return WalkontableLeftOverlay; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___95_base__; |
| var $__0 = ($___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__0.addClass, |
| getScrollbarWidth = $__0.getScrollbarWidth, |
| getScrollLeft = $__0.getScrollLeft, |
| getWindowScrollTop = $__0.getWindowScrollTop, |
| hasClass = $__0.hasClass, |
| outerWidth = $__0.outerWidth, |
| innerHeight = $__0.innerHeight, |
| removeClass = $__0.removeClass, |
| setOverlayPosition = $__0.setOverlayPosition, |
| resetCssTransform = $__0.resetCssTransform; |
| var WalkontableOverlay = ($___95_base__ = _dereq_("_base"), $___95_base__ && $___95_base__.__esModule && $___95_base__ || {default: $___95_base__}).WalkontableOverlay; |
| var WalkontableLeftOverlay = function WalkontableLeftOverlay(wotInstance) { |
| $traceurRuntime.superConstructor($WalkontableLeftOverlay).call(this, wotInstance); |
| this.clone = this.makeClone(WalkontableOverlay.CLONE_LEFT); |
| }; |
| var $WalkontableLeftOverlay = WalkontableLeftOverlay; |
| ($traceurRuntime.createClass)(WalkontableLeftOverlay, { |
| shouldBeRendered: function() { |
| return this.wot.getSetting('fixedColumnsLeft') || this.wot.getSetting('rowHeaders').length ? true : false; |
| }, |
| resetFixedPosition: function() { |
| if (!this.needFullRender || !this.wot.wtTable.holder.parentNode) { |
| return; |
| } |
| var overlayRoot = this.clone.wtTable.holder.parentNode; |
| var headerPosition = 0; |
| var preventOverflow = this.wot.getSetting('preventOverflow'); |
| if (this.trimmingContainer === window && (!preventOverflow || preventOverflow !== 'horizontal')) { |
| var box = this.wot.wtTable.hider.getBoundingClientRect(); |
| var left = Math.ceil(box.left); |
| var right = Math.ceil(box.right); |
| var finalLeft; |
| var finalTop; |
| finalTop = this.wot.wtTable.hider.style.top; |
| finalTop = finalTop === '' ? 0 : finalTop; |
| if (left < 0 && (right - overlayRoot.offsetWidth) > 0) { |
| finalLeft = -left; |
| } else { |
| finalLeft = 0; |
| } |
| headerPosition = finalLeft; |
| finalLeft = finalLeft + 'px'; |
| setOverlayPosition(overlayRoot, finalLeft, finalTop); |
| } else { |
| headerPosition = this.getScrollPosition(); |
| resetCssTransform(overlayRoot); |
| } |
| this.adjustHeaderBordersPosition(headerPosition); |
| this.adjustElementsSize(); |
| }, |
| setScrollPosition: function(pos) { |
| if (this.mainTableScrollableElement === window) { |
| window.scrollTo(pos, getWindowScrollTop()); |
| } else { |
| this.mainTableScrollableElement.scrollLeft = pos; |
| } |
| }, |
| onScroll: function() { |
| this.wot.getSetting('onScrollVertically'); |
| }, |
| sumCellSizes: function(from, to) { |
| var sum = 0; |
| var defaultColumnWidth = this.wot.wtSettings.defaultColumnWidth; |
| while (from < to) { |
| sum += this.wot.wtTable.getStretchedColumnWidth(from) || defaultColumnWidth; |
| from++; |
| } |
| return sum; |
| }, |
| adjustElementsSize: function() { |
| var force = arguments[0] !== (void 0) ? arguments[0] : false; |
| this.updateTrimmingContainer(); |
| if (this.needFullRender || force) { |
| this.adjustRootElementSize(); |
| this.adjustRootChildrenSize(); |
| if (!force) { |
| this.areElementSizesAdjusted = true; |
| } |
| } |
| }, |
| adjustRootElementSize: function() { |
| var masterHolder = this.wot.wtTable.holder; |
| var scrollbarHeight = masterHolder.clientHeight === masterHolder.offsetHeight ? 0 : getScrollbarWidth(); |
| var overlayRoot = this.clone.wtTable.holder.parentNode; |
| var overlayRootStyle = overlayRoot.style; |
| var preventOverflow = this.wot.getSetting('preventOverflow'); |
| var tableWidth; |
| if (this.trimmingContainer !== window || preventOverflow === 'vertical') { |
| var height = this.wot.wtViewport.getWorkspaceHeight() - scrollbarHeight; |
| height = Math.min(height, innerHeight(this.wot.wtTable.wtRootElement)); |
| overlayRootStyle.height = height + 'px'; |
| } else { |
| overlayRootStyle.height = ''; |
| } |
| this.clone.wtTable.holder.style.height = overlayRootStyle.height; |
| tableWidth = outerWidth(this.clone.wtTable.TABLE); |
| overlayRootStyle.width = (tableWidth === 0 ? tableWidth : tableWidth + 4) + 'px'; |
| }, |
| adjustRootChildrenSize: function() { |
| var scrollbarWidth = getScrollbarWidth(); |
| this.clone.wtTable.hider.style.height = this.hider.style.height; |
| this.clone.wtTable.holder.style.height = this.clone.wtTable.holder.parentNode.style.height; |
| if (scrollbarWidth === 0) { |
| scrollbarWidth = 30; |
| } |
| this.clone.wtTable.holder.style.width = parseInt(this.clone.wtTable.holder.parentNode.style.width, 10) + scrollbarWidth + 'px'; |
| }, |
| applyToDOM: function() { |
| var total = this.wot.getSetting('totalColumns'); |
| if (!this.areElementSizesAdjusted) { |
| this.adjustElementsSize(); |
| } |
| if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') { |
| this.spreader.style.left = this.wot.wtViewport.columnsRenderCalculator.startPosition + 'px'; |
| } else if (total === 0) { |
| this.spreader.style.left = '0'; |
| } else { |
| throw new Error('Incorrect value of the columnsRenderCalculator'); |
| } |
| this.spreader.style.right = ''; |
| if (this.needFullRender) { |
| this.syncOverlayOffset(); |
| } |
| }, |
| syncOverlayOffset: function() { |
| if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') { |
| this.clone.wtTable.spreader.style.top = this.wot.wtViewport.rowsRenderCalculator.startPosition + 'px'; |
| } else { |
| this.clone.wtTable.spreader.style.top = ''; |
| } |
| }, |
| scrollTo: function(sourceCol, beyondRendered) { |
| var newX = this.getTableParentOffset(); |
| var sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot; |
| var mainHolder = sourceInstance.wtTable.holder; |
| var scrollbarCompensation = 0; |
| if (beyondRendered && mainHolder.offsetWidth !== mainHolder.clientWidth) { |
| scrollbarCompensation = getScrollbarWidth(); |
| } |
| if (beyondRendered) { |
| newX += this.sumCellSizes(0, sourceCol + 1); |
| newX -= this.wot.wtViewport.getViewportWidth(); |
| } else { |
| newX += this.sumCellSizes(this.wot.getSetting('fixedColumnsLeft'), sourceCol); |
| } |
| newX += scrollbarCompensation; |
| this.setScrollPosition(newX); |
| }, |
| getTableParentOffset: function() { |
| var preventOverflow = this.wot.getSetting('preventOverflow'); |
| var offset = 0; |
| if (!preventOverflow && this.trimmingContainer === window) { |
| offset = this.wot.wtTable.holderOffset.left; |
| } |
| return offset; |
| }, |
| getScrollPosition: function() { |
| return getScrollLeft(this.mainTableScrollableElement); |
| }, |
| adjustHeaderBordersPosition: function(position) { |
| var masterParent = this.wot.wtTable.holder.parentNode; |
| var rowHeaders = this.wot.getSetting('rowHeaders'); |
| var fixedColumnsLeft = this.wot.getSetting('fixedColumnsLeft'); |
| var totalRows = this.wot.getSetting('totalRows'); |
| if (totalRows) { |
| removeClass(masterParent, 'emptyRows'); |
| } else { |
| addClass(masterParent, 'emptyRows'); |
| } |
| if (fixedColumnsLeft && !rowHeaders.length) { |
| addClass(masterParent, 'innerBorderLeft'); |
| } else if (!fixedColumnsLeft && rowHeaders.length) { |
| var previousState = hasClass(masterParent, 'innerBorderLeft'); |
| if (position) { |
| addClass(masterParent, 'innerBorderLeft'); |
| } else { |
| removeClass(masterParent, 'innerBorderLeft'); |
| } |
| if (!previousState && position || previousState && !position) { |
| this.wot.wtOverlays.adjustElementsSize(); |
| } |
| } |
| } |
| }, {}, WalkontableOverlay); |
| ; |
| window.WalkontableLeftOverlay = WalkontableLeftOverlay; |
| WalkontableOverlay.registerOverlay(WalkontableOverlay.CLONE_LEFT, WalkontableLeftOverlay); |
| |
| //# |
| },{"_base":12,"helpers/dom/element":47}],15:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableTopOverlay: {get: function() { |
| return WalkontableTopOverlay; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___95_base__; |
| var $__0 = ($___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__0.addClass, |
| getScrollbarWidth = $__0.getScrollbarWidth, |
| getScrollTop = $__0.getScrollTop, |
| getWindowScrollLeft = $__0.getWindowScrollLeft, |
| hasClass = $__0.hasClass, |
| outerHeight = $__0.outerHeight, |
| innerWidth = $__0.innerWidth, |
| removeClass = $__0.removeClass, |
| setOverlayPosition = $__0.setOverlayPosition, |
| resetCssTransform = $__0.resetCssTransform; |
| var WalkontableOverlay = ($___95_base__ = _dereq_("_base"), $___95_base__ && $___95_base__.__esModule && $___95_base__ || {default: $___95_base__}).WalkontableOverlay; |
| var WalkontableTopOverlay = function WalkontableTopOverlay(wotInstance) { |
| $traceurRuntime.superConstructor($WalkontableTopOverlay).call(this, wotInstance); |
| this.clone = this.makeClone(WalkontableOverlay.CLONE_TOP); |
| }; |
| var $WalkontableTopOverlay = WalkontableTopOverlay; |
| ($traceurRuntime.createClass)(WalkontableTopOverlay, { |
| shouldBeRendered: function() { |
| return this.wot.getSetting('fixedRowsTop') || this.wot.getSetting('columnHeaders').length ? true : false; |
| }, |
| resetFixedPosition: function() { |
| if (!this.needFullRender || !this.wot.wtTable.holder.parentNode) { |
| return; |
| } |
| var overlayRoot = this.clone.wtTable.holder.parentNode; |
| var headerPosition = 0; |
| var preventOverflow = this.wot.getSetting('preventOverflow'); |
| if (this.trimmingContainer === window && (!preventOverflow || preventOverflow !== 'vertical')) { |
| var box = this.wot.wtTable.hider.getBoundingClientRect(); |
| var top = Math.ceil(box.top); |
| var bottom = Math.ceil(box.bottom); |
| var finalLeft; |
| var finalTop; |
| finalLeft = this.wot.wtTable.hider.style.left; |
| finalLeft = finalLeft === '' ? 0 : finalLeft; |
| if (top < 0 && (bottom - overlayRoot.offsetHeight) > 0) { |
| finalTop = -top; |
| } else { |
| finalTop = 0; |
| } |
| headerPosition = finalTop; |
| finalTop = finalTop + 'px'; |
| setOverlayPosition(overlayRoot, finalLeft, finalTop); |
| } else { |
| headerPosition = this.getScrollPosition(); |
| resetCssTransform(overlayRoot); |
| } |
| this.adjustHeaderBordersPosition(headerPosition); |
| this.adjustElementsSize(); |
| }, |
| setScrollPosition: function(pos) { |
| if (this.mainTableScrollableElement === window) { |
| window.scrollTo(getWindowScrollLeft(), pos); |
| } else { |
| this.mainTableScrollableElement.scrollTop = pos; |
| } |
| }, |
| onScroll: function() { |
| this.wot.getSetting('onScrollHorizontally'); |
| }, |
| sumCellSizes: function(from, to) { |
| var sum = 0; |
| var defaultRowHeight = this.wot.wtSettings.settings.defaultRowHeight; |
| while (from < to) { |
| var height = this.wot.wtTable.getRowHeight(from); |
| sum += height === void 0 ? defaultRowHeight : height; |
| from++; |
| } |
| return sum; |
| }, |
| adjustElementsSize: function() { |
| var force = arguments[0] !== (void 0) ? arguments[0] : false; |
| this.updateTrimmingContainer(); |
| if (this.needFullRender || force) { |
| this.adjustRootElementSize(); |
| this.adjustRootChildrenSize(); |
| if (!force) { |
| this.areElementSizesAdjusted = true; |
| } |
| } |
| }, |
| adjustRootElementSize: function() { |
| var masterHolder = this.wot.wtTable.holder; |
| var scrollbarWidth = masterHolder.clientWidth === masterHolder.offsetWidth ? 0 : getScrollbarWidth(); |
| var overlayRoot = this.clone.wtTable.holder.parentNode; |
| var overlayRootStyle = overlayRoot.style; |
| var preventOverflow = this.wot.getSetting('preventOverflow'); |
| var tableHeight; |
| if (this.trimmingContainer !== window || preventOverflow === 'horizontal') { |
| var width = this.wot.wtViewport.getWorkspaceWidth() - scrollbarWidth; |
| width = Math.min(width, innerWidth(this.wot.wtTable.wtRootElement)); |
| overlayRootStyle.width = width + 'px'; |
| } else { |
| overlayRootStyle.width = ''; |
| } |
| this.clone.wtTable.holder.style.width = overlayRootStyle.width; |
| tableHeight = outerHeight(this.clone.wtTable.TABLE); |
| overlayRootStyle.height = (tableHeight === 0 ? tableHeight : tableHeight + 4) + 'px'; |
| }, |
| adjustRootChildrenSize: function() { |
| var scrollbarWidth = getScrollbarWidth(); |
| this.clone.wtTable.hider.style.width = this.hider.style.width; |
| this.clone.wtTable.holder.style.width = this.clone.wtTable.holder.parentNode.style.width; |
| if (scrollbarWidth === 0) { |
| scrollbarWidth = 30; |
| } |
| this.clone.wtTable.holder.style.height = parseInt(this.clone.wtTable.holder.parentNode.style.height, 10) + scrollbarWidth + 'px'; |
| }, |
| applyToDOM: function() { |
| var total = this.wot.getSetting('totalRows'); |
| if (!this.areElementSizesAdjusted) { |
| this.adjustElementsSize(); |
| } |
| if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') { |
| this.spreader.style.top = this.wot.wtViewport.rowsRenderCalculator.startPosition + 'px'; |
| } else if (total === 0) { |
| this.spreader.style.top = '0'; |
| } else { |
| throw new Error('Incorrect value of the rowsRenderCalculator'); |
| } |
| this.spreader.style.bottom = ''; |
| if (this.needFullRender) { |
| this.syncOverlayOffset(); |
| } |
| }, |
| syncOverlayOffset: function() { |
| if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') { |
| this.clone.wtTable.spreader.style.left = this.wot.wtViewport.columnsRenderCalculator.startPosition + 'px'; |
| } else { |
| this.clone.wtTable.spreader.style.left = ''; |
| } |
| }, |
| scrollTo: function(sourceRow, bottomEdge) { |
| var newY = this.getTableParentOffset(); |
| var sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot; |
| var mainHolder = sourceInstance.wtTable.holder; |
| var scrollbarCompensation = 0; |
| if (bottomEdge && mainHolder.offsetHeight !== mainHolder.clientHeight) { |
| scrollbarCompensation = getScrollbarWidth(); |
| } |
| if (bottomEdge) { |
| var fixedRowsBottom = this.wot.getSetting('fixedRowsBottom'); |
| var fixedRowsTop = this.wot.getSetting('fixedRowsTop'); |
| var totalRows = this.wot.getSetting('totalRows'); |
| newY += this.sumCellSizes(0, sourceRow + 1); |
| newY -= this.wot.wtViewport.getViewportHeight() - this.sumCellSizes(totalRows - fixedRowsBottom, totalRows); |
| newY += 1; |
| } else { |
| newY += this.sumCellSizes(this.wot.getSetting('fixedRowsTop'), sourceRow); |
| } |
| newY += scrollbarCompensation; |
| this.setScrollPosition(newY); |
| }, |
| getTableParentOffset: function() { |
| if (this.mainTableScrollableElement === window) { |
| return this.wot.wtTable.holderOffset.top; |
| } else { |
| return 0; |
| } |
| }, |
| getScrollPosition: function() { |
| return getScrollTop(this.mainTableScrollableElement); |
| }, |
| adjustHeaderBordersPosition: function(position) { |
| var masterParent = this.wot.wtTable.holder.parentNode; |
| var totalColumns = this.wot.getSetting('totalColumns'); |
| if (totalColumns) { |
| removeClass(masterParent, 'emptyColumns'); |
| } else { |
| addClass(masterParent, 'emptyColumns'); |
| } |
| if (this.wot.getSetting('fixedRowsTop') === 0 && this.wot.getSetting('columnHeaders').length > 0) { |
| var previousState = hasClass(masterParent, 'innerBorderTop'); |
| if (position || this.wot.getSetting('totalRows') === 0) { |
| addClass(masterParent, 'innerBorderTop'); |
| } else { |
| removeClass(masterParent, 'innerBorderTop'); |
| } |
| if (!previousState && position || previousState && !position) { |
| this.wot.wtOverlays.adjustElementsSize(); |
| } |
| } |
| if (this.wot.getSetting('rowHeaders').length === 0) { |
| var secondHeaderCell = this.clone.wtTable.THEAD.querySelectorAll('th:nth-of-type(2)'); |
| if (secondHeaderCell) { |
| for (var i = 0; i < secondHeaderCell.length; i++) { |
| secondHeaderCell[i].style['border-left-width'] = 0; |
| } |
| } |
| } |
| } |
| }, {}, WalkontableOverlay); |
| ; |
| window.WalkontableTopOverlay = WalkontableTopOverlay; |
| WalkontableOverlay.registerOverlay(WalkontableOverlay.CLONE_TOP, WalkontableTopOverlay); |
| |
| //# |
| },{"_base":12,"helpers/dom/element":47}],16:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableTopLeftCornerOverlay: {get: function() { |
| return WalkontableTopLeftCornerOverlay; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___95_base__; |
| var $__0 = ($___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| outerHeight = $__0.outerHeight, |
| outerWidth = $__0.outerWidth, |
| setOverlayPosition = $__0.setOverlayPosition, |
| resetCssTransform = $__0.resetCssTransform; |
| var WalkontableOverlay = ($___95_base__ = _dereq_("_base"), $___95_base__ && $___95_base__.__esModule && $___95_base__ || {default: $___95_base__}).WalkontableOverlay; |
| var WalkontableTopLeftCornerOverlay = function WalkontableTopLeftCornerOverlay(wotInstance) { |
| $traceurRuntime.superConstructor($WalkontableTopLeftCornerOverlay).call(this, wotInstance); |
| this.clone = this.makeClone(WalkontableOverlay.CLONE_TOP_LEFT_CORNER); |
| }; |
| var $WalkontableTopLeftCornerOverlay = WalkontableTopLeftCornerOverlay; |
| ($traceurRuntime.createClass)(WalkontableTopLeftCornerOverlay, { |
| shouldBeRendered: function() { |
| return (this.wot.getSetting('fixedRowsTop') || this.wot.getSetting('columnHeaders').length) && (this.wot.getSetting('fixedColumnsLeft') || this.wot.getSetting('rowHeaders').length) ? true : false; |
| }, |
| resetFixedPosition: function() { |
| this.updateTrimmingContainer(); |
| if (!this.wot.wtTable.holder.parentNode) { |
| return; |
| } |
| var overlayRoot = this.clone.wtTable.holder.parentNode; |
| var tableHeight = outerHeight(this.clone.wtTable.TABLE); |
| var tableWidth = outerWidth(this.clone.wtTable.TABLE); |
| var preventOverflow = this.wot.getSetting('preventOverflow'); |
| if (this.trimmingContainer === window) { |
| var box = this.wot.wtTable.hider.getBoundingClientRect(); |
| var top = Math.ceil(box.top); |
| var left = Math.ceil(box.left); |
| var bottom = Math.ceil(box.bottom); |
| var right = Math.ceil(box.right); |
| var finalLeft = '0'; |
| var finalTop = '0'; |
| if (!preventOverflow || preventOverflow === 'vertical') { |
| if (left < 0 && (right - overlayRoot.offsetWidth) > 0) { |
| finalLeft = -left + 'px'; |
| } |
| } |
| if (!preventOverflow || preventOverflow === 'horizontal') { |
| if (top < 0 && (bottom - overlayRoot.offsetHeight) > 0) { |
| finalTop = -top + 'px'; |
| } |
| } |
| setOverlayPosition(overlayRoot, finalLeft, finalTop); |
| } else { |
| resetCssTransform(overlayRoot); |
| } |
| overlayRoot.style.height = (tableHeight === 0 ? tableHeight : tableHeight + 4) + 'px'; |
| overlayRoot.style.width = (tableWidth === 0 ? tableWidth : tableWidth + 4) + 'px'; |
| } |
| }, {}, WalkontableOverlay); |
| ; |
| window.WalkontableTopLeftCornerOverlay = WalkontableTopLeftCornerOverlay; |
| WalkontableOverlay.registerOverlay(WalkontableOverlay.CLONE_TOP_LEFT_CORNER, WalkontableTopLeftCornerOverlay); |
| |
| //# |
| },{"_base":12,"helpers/dom/element":47}],17:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableOverlays: {get: function() { |
| return WalkontableOverlays; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47__46__46__47_helpers_47_array__, |
| $___46__46__47__46__46__47__46__46__47_helpers_47_unicode__, |
| $___46__46__47__46__46__47__46__46__47_helpers_47_browser__, |
| $___46__46__47__46__46__47__46__46__47_eventManager__; |
| var $__0 = ($___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| getScrollableElement = $__0.getScrollableElement, |
| getScrollbarWidth = $__0.getScrollbarWidth, |
| getScrollLeft = $__0.getScrollLeft, |
| getScrollTop = $__0.getScrollTop; |
| var arrayEach = ($___46__46__47__46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_array__}).arrayEach; |
| var isKey = ($___46__46__47__46__46__47__46__46__47_helpers_47_unicode__ = _dereq_("helpers/unicode"), $___46__46__47__46__46__47__46__46__47_helpers_47_unicode__ && $___46__46__47__46__46__47__46__46__47_helpers_47_unicode__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_unicode__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_unicode__}).isKey; |
| var isMobileBrowser = ($___46__46__47__46__46__47__46__46__47_helpers_47_browser__ = _dereq_("helpers/browser"), $___46__46__47__46__46__47__46__46__47_helpers_47_browser__ && $___46__46__47__46__46__47__46__46__47_helpers_47_browser__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_browser__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_browser__}).isMobileBrowser; |
| var EventManager = ($___46__46__47__46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47__46__46__47_eventManager__}).EventManager; |
| var WalkontableOverlays = function WalkontableOverlays(wotInstance) { |
| this.wot = wotInstance; |
| this.instance = this.wot; |
| this.eventManager = new EventManager(this.wot); |
| this.wot.update('scrollbarWidth', getScrollbarWidth()); |
| this.wot.update('scrollbarHeight', getScrollbarWidth()); |
| this.scrollableElement = getScrollableElement(this.wot.wtTable.TABLE); |
| this.topOverlay = WalkontableOverlay.createOverlay(WalkontableOverlay.CLONE_TOP, this.wot); |
| if (typeof WalkontableBottomOverlay === 'undefined') { |
| this.bottomOverlay = {needFullRender: false}; |
| } else { |
| this.bottomOverlay = WalkontableOverlay.createOverlay(WalkontableOverlay.CLONE_BOTTOM, this.wot); |
| } |
| this.leftOverlay = WalkontableOverlay.createOverlay(WalkontableOverlay.CLONE_LEFT, this.wot); |
| if (this.topOverlay.needFullRender && this.leftOverlay.needFullRender) { |
| this.topLeftCornerOverlay = WalkontableOverlay.createOverlay(WalkontableOverlay.CLONE_TOP_LEFT_CORNER, this.wot); |
| } |
| if (this.bottomOverlay.needFullRender && this.leftOverlay.needFullRender && typeof WalkontableBottomLeftCornerOverlay !== 'undefined') { |
| this.bottomLeftCornerOverlay = WalkontableOverlay.createOverlay(WalkontableOverlay.CLONE_BOTTOM_LEFT_CORNER, this.wot); |
| } else { |
| this.bottomLeftCornerOverlay = {needFullRender: false}; |
| } |
| if (this.wot.getSetting('debug')) { |
| this.debug = WalkontableOverlay.createOverlay(WalkontableOverlay.CLONE_DEBUG, this.wot); |
| } |
| this.destroyed = false; |
| this.keyPressed = false; |
| this.spreaderLastSize = { |
| width: null, |
| height: null |
| }; |
| this.overlayScrollPositions = { |
| master: { |
| top: 0, |
| left: 0 |
| }, |
| top: { |
| top: null, |
| left: 0 |
| }, |
| bottom: { |
| top: null, |
| left: 0 |
| }, |
| left: { |
| top: 0, |
| left: null |
| } |
| }; |
| this.pendingScrollCallbacks = { |
| master: { |
| top: 0, |
| left: 0 |
| }, |
| top: {left: 0}, |
| bottom: {left: 0}, |
| left: {top: 0} |
| }; |
| this.verticalScrolling = false; |
| this.horizontalScrolling = false; |
| this.delegatedScrollCallback = false; |
| this.registeredListeners = []; |
| this.registerListeners(); |
| }; |
| ($traceurRuntime.createClass)(WalkontableOverlays, { |
| refreshAll: function() { |
| if (!this.wot.drawn) { |
| return; |
| } |
| if (!this.wot.wtTable.holder.parentNode) { |
| this.destroy(); |
| return; |
| } |
| this.wot.draw(true); |
| if (this.verticalScrolling) { |
| this.leftOverlay.onScroll(); |
| } |
| if (this.horizontalScrolling) { |
| this.topOverlay.onScroll(); |
| } |
| this.verticalScrolling = false; |
| this.horizontalScrolling = false; |
| }, |
| registerListeners: function() { |
| var $__5 = this; |
| var topOverlayScrollable = this.topOverlay.mainTableScrollableElement; |
| var leftOverlayScrollable = this.leftOverlay.mainTableScrollableElement; |
| var listenersToRegister = []; |
| listenersToRegister.push([document.documentElement, 'keydown', (function(event) { |
| return $__5.onKeyDown(event); |
| })]); |
| listenersToRegister.push([document.documentElement, 'keyup', (function() { |
| return $__5.onKeyUp(); |
| })]); |
| listenersToRegister.push([document, 'visibilitychange', (function() { |
| return $__5.onKeyUp(); |
| })]); |
| listenersToRegister.push([topOverlayScrollable, 'scroll', (function(event) { |
| return $__5.onTableScroll(event); |
| })]); |
| if (topOverlayScrollable !== leftOverlayScrollable) { |
| listenersToRegister.push([leftOverlayScrollable, 'scroll', (function(event) { |
| return $__5.onTableScroll(event); |
| })]); |
| } |
| if (this.topOverlay.needFullRender) { |
| listenersToRegister.push([this.topOverlay.clone.wtTable.holder, 'scroll', (function(event) { |
| return $__5.onTableScroll(event); |
| })]); |
| listenersToRegister.push([this.topOverlay.clone.wtTable.holder, 'wheel', (function(event) { |
| return $__5.onTableScroll(event); |
| })]); |
| } |
| if (this.bottomOverlay.needFullRender) { |
| listenersToRegister.push([this.bottomOverlay.clone.wtTable.holder, 'scroll', (function(event) { |
| return $__5.onTableScroll(event); |
| })]); |
| listenersToRegister.push([this.bottomOverlay.clone.wtTable.holder, 'wheel', (function(event) { |
| return $__5.onTableScroll(event); |
| })]); |
| } |
| if (this.leftOverlay.needFullRender) { |
| listenersToRegister.push([this.leftOverlay.clone.wtTable.holder, 'scroll', (function(event) { |
| return $__5.onTableScroll(event); |
| })]); |
| listenersToRegister.push([this.leftOverlay.clone.wtTable.holder, 'wheel', (function(event) { |
| return $__5.onTableScroll(event); |
| })]); |
| } |
| if (this.topOverlay.trimmingContainer !== window && this.leftOverlay.trimmingContainer !== window) { |
| listenersToRegister.push([window, 'wheel', (function(event) { |
| var overlay; |
| var deltaY = event.wheelDeltaY || event.deltaY; |
| var deltaX = event.wheelDeltaX || event.deltaX; |
| if ($__5.topOverlay.clone.wtTable.holder.contains(event.realTarget)) { |
| overlay = 'top'; |
| } else if ($__5.bottomOverlay.clone && $__5.bottomOverlay.clone.wtTable.holder.contains(event.realTarget)) { |
| overlay = 'bottom'; |
| } else if ($__5.leftOverlay.clone.wtTable.holder.contains(event.realTarget)) { |
| overlay = 'left'; |
| } |
| if (overlay == 'top' && deltaY !== 0) { |
| event.preventDefault(); |
| } else if (overlay == 'left' && deltaX !== 0) { |
| event.preventDefault(); |
| } else if (overlay == 'bottom' && deltaY !== 0) { |
| event.preventDefault(); |
| } |
| })]); |
| } |
| while (listenersToRegister.length) { |
| var listener = listenersToRegister.pop(); |
| this.eventManager.addEventListener(listener[0], listener[1], listener[2]); |
| this.registeredListeners.push(listener); |
| } |
| }, |
| deregisterListeners: function() { |
| while (this.registeredListeners.length) { |
| var listener = this.registeredListeners.pop(); |
| this.eventManager.removeEventListener(listener[0], listener[1], listener[2]); |
| } |
| }, |
| onTableScroll: function(event) { |
| if (isMobileBrowser()) { |
| return; |
| } |
| var masterHorizontal = this.leftOverlay.mainTableScrollableElement; |
| var masterVertical = this.topOverlay.mainTableScrollableElement; |
| var target = event.target; |
| if (this.keyPressed) { |
| if ((masterVertical !== window && target !== window && !event.target.contains(masterVertical)) || (masterHorizontal !== window && target !== window && !event.target.contains(masterHorizontal))) { |
| return; |
| } |
| } |
| if (event.type === 'scroll') { |
| this.syncScrollPositions(event); |
| } else { |
| this.translateMouseWheelToScroll(event); |
| } |
| }, |
| onKeyDown: function(event) { |
| this.keyPressed = isKey(event.keyCode, 'ARROW_UP|ARROW_RIGHT|ARROW_DOWN|ARROW_LEFT'); |
| }, |
| onKeyUp: function() { |
| this.keyPressed = false; |
| }, |
| translateMouseWheelToScroll: function(event) { |
| var topOverlay = this.topOverlay.clone.wtTable.holder; |
| var bottomOverlay = this.bottomOverlay.clone ? this.bottomOverlay.clone.wtTable.holder : null; |
| var leftOverlay = this.leftOverlay.clone.wtTable.holder; |
| var eventMockup = {type: 'wheel'}; |
| var tempElem = event.target; |
| var deltaY = event.wheelDeltaY || (-1) * event.deltaY; |
| var deltaX = event.wheelDeltaX || (-1) * event.deltaX; |
| var parentHolder; |
| if (event.deltaMode === 1) { |
| deltaY = deltaY * 120; |
| deltaX = deltaX * 120; |
| } |
| while (tempElem != document && tempElem != null) { |
| if (tempElem.className.indexOf('wtHolder') > -1) { |
| parentHolder = tempElem; |
| break; |
| } |
| tempElem = tempElem.parentNode; |
| } |
| eventMockup.target = parentHolder; |
| if (parentHolder == topOverlay) { |
| this.syncScrollPositions(eventMockup, (-0.2) * deltaY); |
| } else if (parentHolder == bottomOverlay) { |
| this.syncScrollPositions(eventMockup, (-0.2) * deltaY); |
| } else if (parentHolder == leftOverlay) { |
| this.syncScrollPositions(eventMockup, (-0.2) * deltaX); |
| } |
| return false; |
| }, |
| syncScrollPositions: function(event) { |
| var fakeScrollValue = arguments[1] !== (void 0) ? arguments[1] : null; |
| if (this.destroyed) { |
| return; |
| } |
| if (arguments.length === 0) { |
| this.syncScrollWithMaster(); |
| return; |
| } |
| var masterHorizontal = this.leftOverlay.mainTableScrollableElement; |
| var masterVertical = this.topOverlay.mainTableScrollableElement; |
| var target = event.target; |
| var tempScrollValue = 0; |
| var scrollValueChanged = false; |
| var topOverlay; |
| var leftOverlay; |
| var bottomOverlay; |
| var delegatedScroll = false; |
| var preventOverflow = this.wot.getSetting('preventOverflow'); |
| if (this.topOverlay.needFullRender) { |
| topOverlay = this.topOverlay.clone.wtTable.holder; |
| } |
| if (this.bottomOverlay.needFullRender) { |
| bottomOverlay = this.bottomOverlay.clone.wtTable.holder; |
| } |
| if (this.leftOverlay.needFullRender) { |
| leftOverlay = this.leftOverlay.clone.wtTable.holder; |
| } |
| if (target === document) { |
| target = window; |
| } |
| if (target === masterHorizontal || target === masterVertical) { |
| if (preventOverflow) { |
| tempScrollValue = getScrollLeft(this.scrollableElement); |
| } else { |
| tempScrollValue = getScrollLeft(target); |
| } |
| this.horizontalScrolling = true; |
| this.overlayScrollPositions.master.left = tempScrollValue; |
| scrollValueChanged = true; |
| if (this.pendingScrollCallbacks.master.left > 0) { |
| this.pendingScrollCallbacks.master.left--; |
| } else { |
| if (topOverlay && topOverlay.scrollLeft !== tempScrollValue) { |
| if (fakeScrollValue == null) { |
| this.pendingScrollCallbacks.top.left++; |
| } |
| topOverlay.scrollLeft = tempScrollValue; |
| delegatedScroll = (masterHorizontal !== window); |
| } |
| if (bottomOverlay && bottomOverlay.scrollLeft !== tempScrollValue) { |
| if (fakeScrollValue == null) { |
| this.pendingScrollCallbacks.bottom.left++; |
| } |
| bottomOverlay.scrollLeft = tempScrollValue; |
| delegatedScroll = (masterHorizontal !== window); |
| } |
| } |
| tempScrollValue = getScrollTop(target); |
| this.verticalScrolling = true; |
| this.overlayScrollPositions.master.top = tempScrollValue; |
| scrollValueChanged = true; |
| if (this.pendingScrollCallbacks.master.top > 0) { |
| this.pendingScrollCallbacks.master.top--; |
| } else { |
| if (leftOverlay && leftOverlay.scrollTop !== tempScrollValue) { |
| if (fakeScrollValue == null) { |
| this.pendingScrollCallbacks.left.top++; |
| } |
| leftOverlay.scrollTop = tempScrollValue; |
| delegatedScroll = (masterVertical !== window); |
| } |
| } |
| } else if (target === bottomOverlay) { |
| tempScrollValue = getScrollLeft(target); |
| this.horizontalScrolling = true; |
| this.overlayScrollPositions.bottom.left = tempScrollValue; |
| scrollValueChanged = true; |
| if (this.pendingScrollCallbacks.bottom.left > 0) { |
| this.pendingScrollCallbacks.bottom.left--; |
| } else { |
| if (fakeScrollValue == null) { |
| this.pendingScrollCallbacks.master.left++; |
| } |
| masterHorizontal.scrollLeft = tempScrollValue; |
| if (topOverlay && topOverlay.scrollLeft !== tempScrollValue) { |
| if (fakeScrollValue == null) { |
| this.pendingScrollCallbacks.top.left++; |
| } |
| topOverlay.scrollLeft = tempScrollValue; |
| delegatedScroll = (masterVertical !== window); |
| } |
| } |
| if (fakeScrollValue !== null) { |
| scrollValueChanged = true; |
| masterVertical.scrollTop += fakeScrollValue; |
| } |
| } else if (target === topOverlay) { |
| tempScrollValue = getScrollLeft(target); |
| this.horizontalScrolling = true; |
| this.overlayScrollPositions.top.left = tempScrollValue; |
| scrollValueChanged = true; |
| if (this.pendingScrollCallbacks.top.left > 0) { |
| this.pendingScrollCallbacks.top.left--; |
| } else { |
| if (fakeScrollValue == null) { |
| this.pendingScrollCallbacks.master.left++; |
| } |
| masterHorizontal.scrollLeft = tempScrollValue; |
| } |
| if (fakeScrollValue !== null) { |
| scrollValueChanged = true; |
| masterVertical.scrollTop += fakeScrollValue; |
| } |
| if (bottomOverlay && bottomOverlay.scrollLeft !== tempScrollValue) { |
| if (fakeScrollValue == null) { |
| this.pendingScrollCallbacks.bottom.left++; |
| } |
| bottomOverlay.scrollLeft = tempScrollValue; |
| delegatedScroll = (masterVertical !== window); |
| } |
| } else if (target === leftOverlay) { |
| tempScrollValue = getScrollTop(target); |
| if (this.overlayScrollPositions.left.top !== tempScrollValue) { |
| this.verticalScrolling = true; |
| this.overlayScrollPositions.left.top = tempScrollValue; |
| scrollValueChanged = true; |
| if (this.pendingScrollCallbacks.left.top > 0) { |
| this.pendingScrollCallbacks.left.top--; |
| } else { |
| if (fakeScrollValue == null) { |
| this.pendingScrollCallbacks.master.top++; |
| } |
| masterVertical.scrollTop = tempScrollValue; |
| } |
| } |
| if (fakeScrollValue !== null) { |
| scrollValueChanged = true; |
| masterVertical.scrollLeft += fakeScrollValue; |
| } |
| } |
| if (!this.keyPressed && scrollValueChanged && event.type === 'scroll') { |
| if (this.delegatedScrollCallback) { |
| this.delegatedScrollCallback = false; |
| } else { |
| this.refreshAll(); |
| } |
| if (delegatedScroll) { |
| this.delegatedScrollCallback = true; |
| } |
| } |
| }, |
| syncScrollWithMaster: function() { |
| var master = this.topOverlay.mainTableScrollableElement; |
| if (this.topOverlay.needFullRender) { |
| this.topOverlay.clone.wtTable.holder.scrollLeft = master.scrollLeft; |
| } |
| if (this.leftOverlay.needFullRender) { |
| this.leftOverlay.clone.wtTable.holder.scrollTop = master.scrollTop; |
| } |
| }, |
| updateMainScrollableElements: function() { |
| this.deregisterListeners(); |
| this.leftOverlay.updateMainScrollableElement(); |
| this.topOverlay.updateMainScrollableElement(); |
| if (this.bottomOverlay.needFullRender) { |
| this.bottomOverlay.updateMainScrollableElement(); |
| } |
| this.scrollableElement = getScrollableElement(this.wot.wtTable.TABLE); |
| this.registerListeners(); |
| }, |
| destroy: function() { |
| this.eventManager.destroy(); |
| this.topOverlay.destroy(); |
| if (this.bottomOverlay.clone) { |
| this.bottomOverlay.destroy(); |
| } |
| this.leftOverlay.destroy(); |
| if (this.topLeftCornerOverlay) { |
| this.topLeftCornerOverlay.destroy(); |
| } |
| if (this.bottomLeftCornerOverlay && this.bottomLeftCornerOverlay.clone) { |
| this.bottomLeftCornerOverlay.destroy(); |
| } |
| if (this.debug) { |
| this.debug.destroy(); |
| } |
| this.destroyed = true; |
| }, |
| refresh: function() { |
| var fastDraw = arguments[0] !== (void 0) ? arguments[0] : false; |
| if (this.topOverlay.areElementSizesAdjusted && this.leftOverlay.areElementSizesAdjusted) { |
| var container = this.wot.wtTable.wtRootElement.parentNode || this.wot.wtTable.wtRootElement; |
| var width = container.clientWidth; |
| var height = container.clientHeight; |
| if (width !== this.spreaderLastSize.width || height !== this.spreaderLastSize.height) { |
| this.spreaderLastSize.width = width; |
| this.spreaderLastSize.height = height; |
| this.adjustElementsSize(); |
| } |
| } |
| if (this.bottomOverlay.clone) { |
| this.bottomOverlay.refresh(fastDraw); |
| } |
| this.leftOverlay.refresh(fastDraw); |
| this.topOverlay.refresh(fastDraw); |
| if (this.topLeftCornerOverlay) { |
| this.topLeftCornerOverlay.refresh(fastDraw); |
| } |
| if (this.bottomLeftCornerOverlay && this.bottomLeftCornerOverlay.clone) { |
| this.bottomLeftCornerOverlay.refresh(fastDraw); |
| } |
| if (this.debug) { |
| this.debug.refresh(fastDraw); |
| } |
| }, |
| adjustElementsSize: function() { |
| var force = arguments[0] !== (void 0) ? arguments[0] : false; |
| var totalColumns = this.wot.getSetting('totalColumns'); |
| var totalRows = this.wot.getSetting('totalRows'); |
| var headerRowSize = this.wot.wtViewport.getRowHeaderWidth(); |
| var headerColumnSize = this.wot.wtViewport.getColumnHeaderHeight(); |
| var hiderStyle = this.wot.wtTable.hider.style; |
| hiderStyle.width = (headerRowSize + this.leftOverlay.sumCellSizes(0, totalColumns)) + 'px'; |
| hiderStyle.height = (headerColumnSize + this.topOverlay.sumCellSizes(0, totalRows) + 1) + 'px'; |
| this.topOverlay.adjustElementsSize(force); |
| this.leftOverlay.adjustElementsSize(force); |
| if (this.bottomOverlay.clone) { |
| this.bottomOverlay.adjustElementsSize(force); |
| } |
| }, |
| applyToDOM: function() { |
| if (!this.topOverlay.areElementSizesAdjusted || !this.leftOverlay.areElementSizesAdjusted) { |
| this.adjustElementsSize(); |
| } |
| this.topOverlay.applyToDOM(); |
| if (this.bottomOverlay.clone) { |
| this.bottomOverlay.applyToDOM(); |
| } |
| this.leftOverlay.applyToDOM(); |
| }, |
| getParentOverlay: function(element) { |
| if (!element) { |
| return null; |
| } |
| var overlays = [this.topOverlay, this.leftOverlay, this.bottomOverlay, this.topLeftCornerOverlay, this.bottomLeftCornerOverlay]; |
| var result = null; |
| arrayEach(overlays, (function(elem, i) { |
| if (!elem) { |
| return; |
| } |
| if (elem.clone && elem.clone.wtTable.TABLE.contains(element)) { |
| result = elem.clone; |
| } |
| })); |
| return result; |
| } |
| }, {}); |
| ; |
| window.WalkontableOverlays = WalkontableOverlays; |
| |
| //# |
| },{"eventManager":42,"helpers/array":43,"helpers/browser":44,"helpers/dom/element":47,"helpers/unicode":56}],18:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableScroll: {get: function() { |
| return WalkontableScroll; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47__46__46__47_helpers_47_number__; |
| var $__0 = ($___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| innerHeight = $__0.innerHeight, |
| innerWidth = $__0.innerWidth, |
| getScrollLeft = $__0.getScrollLeft, |
| getScrollTop = $__0.getScrollTop, |
| offset = $__0.offset; |
| var $__1 = ($___46__46__47__46__46__47__46__46__47_helpers_47_number__ = _dereq_("helpers/number"), $___46__46__47__46__46__47__46__46__47_helpers_47_number__ && $___46__46__47__46__46__47__46__46__47_helpers_47_number__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_number__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_number__}), |
| rangeEach = $__1.rangeEach, |
| rangeEachReverse = $__1.rangeEachReverse; |
| var WalkontableScroll = function WalkontableScroll(wotInstance) { |
| this.wot = wotInstance; |
| this.instance = wotInstance; |
| }; |
| ($traceurRuntime.createClass)(WalkontableScroll, { |
| scrollViewport: function(coords) { |
| if (!this.wot.drawn) { |
| return; |
| } |
| var $__3 = this._getVariables(), |
| topOverlay = $__3.topOverlay, |
| leftOverlay = $__3.leftOverlay, |
| totalRows = $__3.totalRows, |
| totalColumns = $__3.totalColumns, |
| fixedRowsTop = $__3.fixedRowsTop, |
| fixedRowsBottom = $__3.fixedRowsBottom, |
| fixedColumnsLeft = $__3.fixedColumnsLeft; |
| if (coords.row < 0 || coords.row > Math.max(totalRows - 1, 0)) { |
| throw new Error(("row " + coords.row + " does not exist")); |
| } |
| if (coords.col < 0 || coords.col > Math.max(totalColumns - 1, 0)) { |
| throw new Error(("column " + coords.col + " does not exist")); |
| } |
| if (coords.row >= fixedRowsTop && coords.row < this.getFirstVisibleRow()) { |
| topOverlay.scrollTo(coords.row); |
| } else if (coords.row > this.getLastVisibleRow() && coords.row < totalRows - fixedRowsBottom) { |
| topOverlay.scrollTo(coords.row, true); |
| } |
| if (coords.col >= fixedColumnsLeft && coords.col < this.getFirstVisibleColumn()) { |
| leftOverlay.scrollTo(coords.col); |
| } else if (coords.col > this.getLastVisibleColumn()) { |
| leftOverlay.scrollTo(coords.col, true); |
| } |
| }, |
| getFirstVisibleRow: function() { |
| var $__3 = this._getVariables(), |
| topOverlay = $__3.topOverlay, |
| wtTable = $__3.wtTable, |
| wtViewport = $__3.wtViewport, |
| totalRows = $__3.totalRows, |
| fixedRowsTop = $__3.fixedRowsTop; |
| var firstVisibleRow = wtTable.getFirstVisibleRow(); |
| if (topOverlay.mainTableScrollableElement === window) { |
| var rootElementOffset = offset(wtTable.wtRootElement); |
| var totalTableHeight = innerHeight(wtTable.hider); |
| var windowHeight = innerHeight(window); |
| var windowScrollTop = getScrollTop(window); |
| if (rootElementOffset.top + totalTableHeight - windowHeight <= windowScrollTop) { |
| var rowsHeight = wtViewport.getColumnHeaderHeight(); |
| rowsHeight += topOverlay.sumCellSizes(0, fixedRowsTop); |
| rangeEachReverse(totalRows, 1, (function(row) { |
| rowsHeight += topOverlay.sumCellSizes(row - 1, row); |
| if (rootElementOffset.top + totalTableHeight - rowsHeight <= windowScrollTop) { |
| firstVisibleRow = row; |
| return false; |
| } |
| })); |
| } |
| } |
| return firstVisibleRow; |
| }, |
| getLastVisibleRow: function() { |
| var $__3 = this._getVariables(), |
| topOverlay = $__3.topOverlay, |
| wtTable = $__3.wtTable, |
| wtViewport = $__3.wtViewport, |
| totalRows = $__3.totalRows; |
| var lastVisibleRow = wtTable.getLastVisibleRow(); |
| if (topOverlay.mainTableScrollableElement === window) { |
| var rootElementOffset = offset(wtTable.wtRootElement); |
| var windowHeight = innerHeight(window); |
| var windowScrollTop = getScrollTop(window); |
| if (rootElementOffset.top > windowScrollTop) { |
| var rowsHeight = wtViewport.getColumnHeaderHeight(); |
| rangeEach(1, totalRows, (function(row) { |
| rowsHeight += topOverlay.sumCellSizes(row - 1, row); |
| if (rootElementOffset.top + rowsHeight - windowScrollTop >= windowHeight) { |
| lastVisibleRow = row - 2; |
| return false; |
| } |
| })); |
| } |
| } |
| return lastVisibleRow; |
| }, |
| getFirstVisibleColumn: function() { |
| var $__3 = this._getVariables(), |
| leftOverlay = $__3.leftOverlay, |
| wtTable = $__3.wtTable, |
| wtViewport = $__3.wtViewport, |
| totalColumns = $__3.totalColumns, |
| fixedColumnsLeft = $__3.fixedColumnsLeft; |
| var firstVisibleColumn = wtTable.getFirstVisibleColumn(); |
| if (leftOverlay.mainTableScrollableElement === window) { |
| var rootElementOffset = offset(wtTable.wtRootElement); |
| var totalTableWidth = innerWidth(wtTable.hider); |
| var windowWidth = innerWidth(window); |
| var windowScrollLeft = getScrollLeft(window); |
| if (rootElementOffset.left + totalTableWidth - windowWidth <= windowScrollLeft) { |
| var columnsWidth = wtViewport.getRowHeaderWidth(); |
| rangeEachReverse(totalColumns, 1, (function(column) { |
| columnsWidth += leftOverlay.sumCellSizes(column - 1, column); |
| if (rootElementOffset.left + totalTableWidth - columnsWidth <= windowScrollLeft) { |
| firstVisibleColumn = column; |
| return false; |
| } |
| })); |
| } |
| } |
| return firstVisibleColumn; |
| }, |
| getLastVisibleColumn: function() { |
| var $__3 = this._getVariables(), |
| leftOverlay = $__3.leftOverlay, |
| wtTable = $__3.wtTable, |
| wtViewport = $__3.wtViewport, |
| totalColumns = $__3.totalColumns; |
| var lastVisibleColumn = wtTable.getLastVisibleColumn(); |
| if (leftOverlay.mainTableScrollableElement === window) { |
| var rootElementOffset = offset(wtTable.wtRootElement); |
| var windowWidth = innerWidth(window); |
| var windowScrollLeft = getScrollLeft(window); |
| if (rootElementOffset.left > windowScrollLeft) { |
| var columnsWidth = wtViewport.getRowHeaderWidth(); |
| rangeEach(1, totalColumns, (function(column) { |
| columnsWidth += leftOverlay.sumCellSizes(column - 1, column); |
| if (rootElementOffset.left + columnsWidth - windowScrollLeft >= windowWidth) { |
| lastVisibleColumn = column - 2; |
| return false; |
| } |
| })); |
| } |
| } |
| return lastVisibleColumn; |
| }, |
| _getVariables: function() { |
| var wot = this.wot; |
| var topOverlay = wot.wtOverlays.topOverlay; |
| var leftOverlay = wot.wtOverlays.leftOverlay; |
| var wtTable = wot.wtTable; |
| var wtViewport = wot.wtViewport; |
| var totalRows = wot.getSetting('totalRows'); |
| var totalColumns = wot.getSetting('totalColumns'); |
| var fixedRowsTop = wot.getSetting('fixedRowsTop'); |
| var fixedRowsBottom = wot.getSetting('fixedRowsBottom'); |
| var fixedColumnsLeft = wot.getSetting('fixedColumnsLeft'); |
| return { |
| topOverlay: topOverlay, |
| leftOverlay: leftOverlay, |
| wtTable: wtTable, |
| wtViewport: wtViewport, |
| totalRows: totalRows, |
| totalColumns: totalColumns, |
| fixedRowsTop: fixedRowsTop, |
| fixedRowsBottom: fixedRowsBottom, |
| fixedColumnsLeft: fixedColumnsLeft |
| }; |
| } |
| }, {}); |
| ; |
| window.WalkontableScroll = WalkontableScroll; |
| |
| //# |
| },{"helpers/dom/element":47,"helpers/number":52}],19:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableSelection: {get: function() { |
| return WalkontableSelection; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $__border__, |
| $__cell_47_coords__, |
| $__cell_47_range__; |
| var addClass = ($___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__}).addClass; |
| var WalkontableBorder = ($__border__ = _dereq_("border"), $__border__ && $__border__.__esModule && $__border__ || {default: $__border__}).WalkontableBorder; |
| var WalkontableCellCoords = ($__cell_47_coords__ = _dereq_("cell/coords"), $__cell_47_coords__ && $__cell_47_coords__.__esModule && $__cell_47_coords__ || {default: $__cell_47_coords__}).WalkontableCellCoords; |
| var WalkontableCellRange = ($__cell_47_range__ = _dereq_("cell/range"), $__cell_47_range__ && $__cell_47_range__.__esModule && $__cell_47_range__ || {default: $__cell_47_range__}).WalkontableCellRange; |
| var WalkontableSelection = function WalkontableSelection(settings, cellRange) { |
| this.settings = settings; |
| this.cellRange = cellRange || null; |
| this.instanceBorders = {}; |
| }; |
| ($traceurRuntime.createClass)(WalkontableSelection, { |
| getBorder: function(wotInstance) { |
| if (this.instanceBorders[wotInstance.guid]) { |
| return this.instanceBorders[wotInstance.guid]; |
| } |
| this.instanceBorders[wotInstance.guid] = new WalkontableBorder(wotInstance, this.settings); |
| }, |
| isEmpty: function() { |
| return this.cellRange === null; |
| }, |
| add: function(coords) { |
| if (this.isEmpty()) { |
| this.cellRange = new WalkontableCellRange(coords, coords, coords); |
| } else { |
| this.cellRange.expand(coords); |
| } |
| }, |
| replace: function(oldCoords, newCoords) { |
| if (!this.isEmpty()) { |
| if (this.cellRange.from.isEqual(oldCoords)) { |
| this.cellRange.from = newCoords; |
| return true; |
| } |
| if (this.cellRange.to.isEqual(oldCoords)) { |
| this.cellRange.to = newCoords; |
| return true; |
| } |
| } |
| return false; |
| }, |
| clear: function() { |
| this.cellRange = null; |
| }, |
| getCorners: function() { |
| var topLeft = this.cellRange.getTopLeftCorner(); |
| var bottomRight = this.cellRange.getBottomRightCorner(); |
| return [topLeft.row, topLeft.col, bottomRight.row, bottomRight.col]; |
| }, |
| addClassAtCoords: function(wotInstance, sourceRow, sourceColumn, className) { |
| var TD = wotInstance.wtTable.getCell(new WalkontableCellCoords(sourceRow, sourceColumn)); |
| if (typeof TD === 'object') { |
| addClass(TD, className); |
| } |
| }, |
| draw: function(wotInstance) { |
| if (this.isEmpty()) { |
| if (this.settings.border) { |
| var border = this.getBorder(wotInstance); |
| if (border) { |
| border.disappear(); |
| } |
| } |
| return; |
| } |
| var renderedRows = wotInstance.wtTable.getRenderedRowsCount(); |
| var renderedColumns = wotInstance.wtTable.getRenderedColumnsCount(); |
| var corners = this.getCorners(); |
| var sourceRow, |
| sourceCol, |
| TH; |
| for (var column = 0; column < renderedColumns; column++) { |
| sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(column); |
| if (sourceCol >= corners[1] && sourceCol <= corners[3]) { |
| TH = wotInstance.wtTable.getColumnHeader(sourceCol); |
| if (TH && this.settings.highlightColumnClassName) { |
| addClass(TH, this.settings.highlightColumnClassName); |
| } |
| } |
| } |
| for (var row = 0; row < renderedRows; row++) { |
| sourceRow = wotInstance.wtTable.rowFilter.renderedToSource(row); |
| if (sourceRow >= corners[0] && sourceRow <= corners[2]) { |
| TH = wotInstance.wtTable.getRowHeader(sourceRow); |
| if (TH && this.settings.highlightRowClassName) { |
| addClass(TH, this.settings.highlightRowClassName); |
| } |
| } |
| for (var column$__5 = 0; column$__5 < renderedColumns; column$__5++) { |
| sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(column$__5); |
| if (sourceRow >= corners[0] && sourceRow <= corners[2] && sourceCol >= corners[1] && sourceCol <= corners[3]) { |
| if (this.settings.className) { |
| this.addClassAtCoords(wotInstance, sourceRow, sourceCol, this.settings.className); |
| } |
| } else if (sourceRow >= corners[0] && sourceRow <= corners[2]) { |
| if (this.settings.highlightRowClassName) { |
| this.addClassAtCoords(wotInstance, sourceRow, sourceCol, this.settings.highlightRowClassName); |
| } |
| } else if (sourceCol >= corners[1] && sourceCol <= corners[3]) { |
| if (this.settings.highlightColumnClassName) { |
| this.addClassAtCoords(wotInstance, sourceRow, sourceCol, this.settings.highlightColumnClassName); |
| } |
| } |
| } |
| } |
| wotInstance.getSetting('onBeforeDrawBorders', corners, this.settings.className); |
| if (this.settings.border) { |
| var border$__6 = this.getBorder(wotInstance); |
| if (border$__6) { |
| border$__6.appear(corners); |
| } |
| } |
| } |
| }, {}); |
| ; |
| window.WalkontableSelection = WalkontableSelection; |
| |
| //# |
| },{"border":3,"cell/coords":6,"cell/range":7,"helpers/dom/element":47}],20:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableSettings: {get: function() { |
| return WalkontableSettings; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__; |
| var fastInnerText = ($___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__}).fastInnerText; |
| var WalkontableSettings = function WalkontableSettings(wotInstance, settings) { |
| var $__1 = this; |
| this.wot = wotInstance; |
| this.instance = wotInstance; |
| this.defaults = { |
| table: void 0, |
| debug: false, |
| externalRowCalculator: false, |
| stretchH: 'none', |
| currentRowClassName: null, |
| currentColumnClassName: null, |
| preventOverflow: function() { |
| return false; |
| }, |
| data: void 0, |
| fixedColumnsLeft: 0, |
| fixedRowsTop: 0, |
| fixedRowsBottom: 0, |
| minSpareRows: 0, |
| rowHeaders: function() { |
| return []; |
| }, |
| columnHeaders: function() { |
| return []; |
| }, |
| totalRows: void 0, |
| totalColumns: void 0, |
| cellRenderer: (function(row, column, TD) { |
| var cellData = $__1.getSetting('data', row, column); |
| fastInnerText(TD, cellData === void 0 || cellData === null ? '' : cellData); |
| }), |
| columnWidth: function(col) { |
| return; |
| }, |
| rowHeight: function(row) { |
| return; |
| }, |
| defaultRowHeight: 23, |
| defaultColumnWidth: 50, |
| selections: null, |
| hideBorderOnMouseDownOver: false, |
| viewportRowCalculatorOverride: null, |
| viewportColumnCalculatorOverride: null, |
| onCellMouseDown: null, |
| onCellMouseOver: null, |
| onCellDblClick: null, |
| onCellCornerMouseDown: null, |
| onCellCornerDblClick: null, |
| beforeDraw: null, |
| onDraw: null, |
| onBeforeDrawBorders: null, |
| onScrollVertically: null, |
| onScrollHorizontally: null, |
| onBeforeTouchScroll: null, |
| onAfterMomentumScroll: null, |
| onBeforeStretchingColumnWidth: (function(width) { |
| return width; |
| }), |
| scrollbarWidth: 10, |
| scrollbarHeight: 10, |
| renderAllRows: false, |
| groups: false, |
| rowHeaderWidth: null, |
| columnHeaderHeight: null |
| }; |
| this.settings = {}; |
| for (var i in this.defaults) { |
| if (this.defaults.hasOwnProperty(i)) { |
| if (settings[i] !== void 0) { |
| this.settings[i] = settings[i]; |
| } else if (this.defaults[i] === void 0) { |
| throw new Error('A required setting "' + i + '" was not provided'); |
| } else { |
| this.settings[i] = this.defaults[i]; |
| } |
| } |
| } |
| }; |
| ($traceurRuntime.createClass)(WalkontableSettings, { |
| update: function(settings, value) { |
| if (value === void 0) { |
| for (var i in settings) { |
| if (settings.hasOwnProperty(i)) { |
| this.settings[i] = settings[i]; |
| } |
| } |
| } else { |
| this.settings[settings] = value; |
| } |
| return this.wot; |
| }, |
| getSetting: function(key, param1, param2, param3, param4) { |
| if (typeof this.settings[key] === 'function') { |
| return this.settings[key](param1, param2, param3, param4); |
| } else if (param1 !== void 0 && Array.isArray(this.settings[key])) { |
| return this.settings[key][param1]; |
| } else { |
| return this.settings[key]; |
| } |
| }, |
| has: function(key) { |
| return !!this.settings[key]; |
| } |
| }, {}); |
| ; |
| window.WalkontableSettings = WalkontableSettings; |
| |
| //# |
| },{"helpers/dom/element":47}],21:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableTable: {get: function() { |
| return WalkontableTable; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $__cell_47_coords__, |
| $__cell_47_range__, |
| $__filter_47_column__, |
| $__filter_47_row__, |
| $__tableRenderer__; |
| var $__0 = ($___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| getStyle = $__0.getStyle, |
| getTrimmingContainer = $__0.getTrimmingContainer, |
| hasClass = $__0.hasClass, |
| index = $__0.index, |
| offset = $__0.offset, |
| removeClass = $__0.removeClass, |
| removeTextNodes = $__0.removeTextNodes, |
| overlayContainsElement = $__0.overlayContainsElement, |
| closest = $__0.closest; |
| var WalkontableCellCoords = ($__cell_47_coords__ = _dereq_("cell/coords"), $__cell_47_coords__ && $__cell_47_coords__.__esModule && $__cell_47_coords__ || {default: $__cell_47_coords__}).WalkontableCellCoords; |
| var WalkontableCellRange = ($__cell_47_range__ = _dereq_("cell/range"), $__cell_47_range__ && $__cell_47_range__.__esModule && $__cell_47_range__ || {default: $__cell_47_range__}).WalkontableCellRange; |
| var WalkontableColumnFilter = ($__filter_47_column__ = _dereq_("filter/column"), $__filter_47_column__ && $__filter_47_column__.__esModule && $__filter_47_column__ || {default: $__filter_47_column__}).WalkontableColumnFilter; |
| var WalkontableRowFilter = ($__filter_47_row__ = _dereq_("filter/row"), $__filter_47_row__ && $__filter_47_row__.__esModule && $__filter_47_row__ || {default: $__filter_47_row__}).WalkontableRowFilter; |
| var WalkontableTableRenderer = ($__tableRenderer__ = _dereq_("tableRenderer"), $__tableRenderer__ && $__tableRenderer__.__esModule && $__tableRenderer__ || {default: $__tableRenderer__}).WalkontableTableRenderer; |
| var WalkontableTable = function WalkontableTable(wotInstance, table) { |
| this.wot = wotInstance; |
| this.instance = this.wot; |
| this.TABLE = table; |
| this.TBODY = null; |
| this.THEAD = null; |
| this.COLGROUP = null; |
| this.tableOffset = 0; |
| this.holderOffset = 0; |
| removeTextNodes(this.TABLE); |
| this.spreader = this.createSpreader(this.TABLE); |
| this.hider = this.createHider(this.spreader); |
| this.holder = this.createHolder(this.hider); |
| this.wtRootElement = this.holder.parentNode; |
| this.alignOverlaysWithTrimmingContainer(); |
| this.fixTableDomTree(); |
| this.colgroupChildrenLength = this.COLGROUP.childNodes.length; |
| this.theadChildrenLength = this.THEAD.firstChild ? this.THEAD.firstChild.childNodes.length : 0; |
| this.tbodyChildrenLength = this.TBODY.childNodes.length; |
| this.rowFilter = null; |
| this.columnFilter = null; |
| }; |
| ($traceurRuntime.createClass)(WalkontableTable, { |
| fixTableDomTree: function() { |
| this.TBODY = this.TABLE.querySelector('tbody'); |
| if (!this.TBODY) { |
| this.TBODY = document.createElement('tbody'); |
| this.TABLE.appendChild(this.TBODY); |
| } |
| this.THEAD = this.TABLE.querySelector('thead'); |
| if (!this.THEAD) { |
| this.THEAD = document.createElement('thead'); |
| this.TABLE.insertBefore(this.THEAD, this.TBODY); |
| } |
| this.COLGROUP = this.TABLE.querySelector('colgroup'); |
| if (!this.COLGROUP) { |
| this.COLGROUP = document.createElement('colgroup'); |
| this.TABLE.insertBefore(this.COLGROUP, this.THEAD); |
| } |
| if (this.wot.getSetting('columnHeaders').length && !this.THEAD.childNodes.length) { |
| this.THEAD.appendChild(document.createElement('TR')); |
| } |
| }, |
| createSpreader: function(table) { |
| var parent = table.parentNode; |
| var spreader; |
| if (!parent || parent.nodeType !== 1 || !hasClass(parent, 'wtHolder')) { |
| spreader = document.createElement('div'); |
| spreader.className = 'wtSpreader'; |
| if (parent) { |
| parent.insertBefore(spreader, table); |
| } |
| spreader.appendChild(table); |
| } |
| spreader.style.position = 'relative'; |
| return spreader; |
| }, |
| createHider: function(spreader) { |
| var parent = spreader.parentNode; |
| var hider; |
| if (!parent || parent.nodeType !== 1 || !hasClass(parent, 'wtHolder')) { |
| hider = document.createElement('div'); |
| hider.className = 'wtHider'; |
| if (parent) { |
| parent.insertBefore(hider, spreader); |
| } |
| hider.appendChild(spreader); |
| } |
| return hider; |
| }, |
| createHolder: function(hider) { |
| var parent = hider.parentNode; |
| var holder; |
| if (!parent || parent.nodeType !== 1 || !hasClass(parent, 'wtHolder')) { |
| holder = document.createElement('div'); |
| holder.style.position = 'relative'; |
| holder.className = 'wtHolder'; |
| if (parent) { |
| parent.insertBefore(holder, hider); |
| } |
| if (!this.isWorkingOnClone()) { |
| holder.parentNode.className += 'ht_master handsontable'; |
| } |
| holder.appendChild(hider); |
| } |
| return holder; |
| }, |
| alignOverlaysWithTrimmingContainer: function() { |
| var trimmingElement = getTrimmingContainer(this.wtRootElement); |
| if (!this.isWorkingOnClone()) { |
| this.holder.parentNode.style.position = 'relative'; |
| if (trimmingElement === window) { |
| var preventOverflow = this.wot.getSetting('preventOverflow'); |
| if (!preventOverflow) { |
| this.holder.style.overflow = 'visible'; |
| this.wtRootElement.style.overflow = 'visible'; |
| } |
| } else { |
| this.holder.style.width = getStyle(trimmingElement, 'width'); |
| this.holder.style.height = getStyle(trimmingElement, 'height'); |
| this.holder.style.overflow = ''; |
| } |
| } |
| }, |
| isWorkingOnClone: function() { |
| return !!this.wot.cloneSource; |
| }, |
| draw: function(fastDraw) { |
| var totalRows = this.instance.getSetting('totalRows'); |
| if (!this.isWorkingOnClone()) { |
| this.holderOffset = offset(this.holder); |
| fastDraw = this.wot.wtViewport.createRenderCalculators(fastDraw); |
| } |
| if (fastDraw) { |
| if (!this.isWorkingOnClone()) { |
| this.wot.wtViewport.createVisibleCalculators(); |
| } |
| if (this.wot.wtOverlays) { |
| this.wot.wtOverlays.refresh(true); |
| } |
| } else { |
| if (this.isWorkingOnClone()) { |
| this.tableOffset = this.wot.cloneSource.wtTable.tableOffset; |
| } else { |
| this.tableOffset = offset(this.TABLE); |
| } |
| var startRow; |
| if (WalkontableOverlay.isOverlayTypeOf(this.wot.cloneOverlay, WalkontableOverlay.CLONE_DEBUG) || WalkontableOverlay.isOverlayTypeOf(this.wot.cloneOverlay, WalkontableOverlay.CLONE_TOP) || WalkontableOverlay.isOverlayTypeOf(this.wot.cloneOverlay, WalkontableOverlay.CLONE_TOP_LEFT_CORNER)) { |
| startRow = 0; |
| } else if (WalkontableOverlay.isOverlayTypeOf(this.instance.cloneOverlay, WalkontableOverlay.CLONE_BOTTOM) || WalkontableOverlay.isOverlayTypeOf(this.instance.cloneOverlay, WalkontableOverlay.CLONE_BOTTOM_LEFT_CORNER)) { |
| startRow = Math.max(totalRows - this.wot.getSetting('fixedRowsBottom'), 0); |
| } else { |
| startRow = this.wot.wtViewport.rowsRenderCalculator.startRow; |
| } |
| var startColumn; |
| if (WalkontableOverlay.isOverlayTypeOf(this.wot.cloneOverlay, WalkontableOverlay.CLONE_DEBUG) || WalkontableOverlay.isOverlayTypeOf(this.wot.cloneOverlay, WalkontableOverlay.CLONE_LEFT) || WalkontableOverlay.isOverlayTypeOf(this.wot.cloneOverlay, WalkontableOverlay.CLONE_TOP_LEFT_CORNER) || WalkontableOverlay.isOverlayTypeOf(this.wot.cloneOverlay, WalkontableOverlay.CLONE_BOTTOM_LEFT_CORNER)) { |
| startColumn = 0; |
| } else { |
| startColumn = this.wot.wtViewport.columnsRenderCalculator.startColumn; |
| } |
| this.rowFilter = new WalkontableRowFilter(startRow, totalRows, this.wot.getSetting('columnHeaders').length); |
| this.columnFilter = new WalkontableColumnFilter(startColumn, this.wot.getSetting('totalColumns'), this.wot.getSetting('rowHeaders').length); |
| this.alignOverlaysWithTrimmingContainer(); |
| this._doDraw(); |
| } |
| this.refreshSelections(fastDraw); |
| if (!this.isWorkingOnClone()) { |
| this.wot.wtOverlays.topOverlay.resetFixedPosition(); |
| if (this.wot.wtOverlays.bottomOverlay.clone) { |
| this.wot.wtOverlays.bottomOverlay.resetFixedPosition(); |
| } |
| this.wot.wtOverlays.leftOverlay.resetFixedPosition(); |
| if (this.wot.wtOverlays.topLeftCornerOverlay) { |
| this.wot.wtOverlays.topLeftCornerOverlay.resetFixedPosition(); |
| } |
| if (this.instance.wtOverlays.bottomLeftCornerOverlay && this.instance.wtOverlays.bottomLeftCornerOverlay.clone) { |
| this.wot.wtOverlays.bottomLeftCornerOverlay.resetFixedPosition(); |
| } |
| } |
| this.wot.drawn = true; |
| return this; |
| }, |
| _doDraw: function() { |
| var wtRenderer = new WalkontableTableRenderer(this); |
| wtRenderer.render(); |
| }, |
| removeClassFromCells: function(className) { |
| var nodes = this.TABLE.querySelectorAll('.' + className); |
| for (var i = 0, |
| len = nodes.length; i < len; i++) { |
| removeClass(nodes[i], className); |
| } |
| }, |
| refreshSelections: function(fastDraw) { |
| if (!this.wot.selections) { |
| return; |
| } |
| var len = this.wot.selections.length; |
| if (fastDraw) { |
| for (var i = 0; i < len; i++) { |
| if (this.wot.selections[i].settings.className) { |
| this.removeClassFromCells(this.wot.selections[i].settings.className); |
| } |
| if (this.wot.selections[i].settings.highlightRowClassName) { |
| this.removeClassFromCells(this.wot.selections[i].settings.highlightRowClassName); |
| } |
| if (this.wot.selections[i].settings.highlightColumnClassName) { |
| this.removeClassFromCells(this.wot.selections[i].settings.highlightColumnClassName); |
| } |
| } |
| } |
| for (var i$__7 = 0; i$__7 < len; i$__7++) { |
| this.wot.selections[i$__7].draw(this.wot, fastDraw); |
| } |
| }, |
| getCell: function(coords) { |
| if (this.isRowBeforeRenderedRows(coords.row)) { |
| return -1; |
| } else if (this.isRowAfterRenderedRows(coords.row)) { |
| return -2; |
| } |
| var TR = this.TBODY.childNodes[this.rowFilter.sourceToRendered(coords.row)]; |
| if (TR) { |
| return TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(coords.col)]; |
| } |
| }, |
| getColumnHeader: function(col) { |
| var level = arguments[1] !== (void 0) ? arguments[1] : 0; |
| var TR = this.THEAD.childNodes[level]; |
| if (TR) { |
| return TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(col)]; |
| } |
| }, |
| getRowHeader: function(row) { |
| if (this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0) === 0) { |
| return null; |
| } |
| var TR = this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)]; |
| if (TR) { |
| return TR.childNodes[0]; |
| } |
| }, |
| getCoords: function(TD) { |
| if (TD.nodeName !== 'TD' && TD.nodeName !== 'TH') { |
| TD = closest(TD, ['TD', 'TH']); |
| } |
| var TR = TD.parentNode; |
| var CONTAINER = TR.parentNode; |
| var row = index(TR); |
| var col = TD.cellIndex; |
| if (overlayContainsElement(WalkontableOverlay.CLONE_TOP_LEFT_CORNER, TD) || overlayContainsElement(WalkontableOverlay.CLONE_TOP, TD)) { |
| if (CONTAINER.nodeName === 'THEAD') { |
| row -= CONTAINER.childNodes.length; |
| } |
| } else { |
| if (CONTAINER === this.THEAD) { |
| row = this.rowFilter.visibleColHeadedRowToSourceRow(row); |
| } else { |
| row = this.rowFilter.renderedToSource(row); |
| } |
| } |
| if (overlayContainsElement(WalkontableOverlay.CLONE_TOP_LEFT_CORNER, TD) || overlayContainsElement(WalkontableOverlay.CLONE_LEFT, TD)) { |
| col = this.columnFilter.offsettedTH(col); |
| } else { |
| col = this.columnFilter.visibleRowHeadedColumnToSourceColumn(col); |
| } |
| return new WalkontableCellCoords(row, col); |
| }, |
| getTrForRow: function(row) { |
| return this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)]; |
| }, |
| getFirstRenderedRow: function() { |
| return this.wot.wtViewport.rowsRenderCalculator.startRow; |
| }, |
| getFirstVisibleRow: function() { |
| return this.wot.wtViewport.rowsVisibleCalculator.startRow; |
| }, |
| getFirstRenderedColumn: function() { |
| return this.wot.wtViewport.columnsRenderCalculator.startColumn; |
| }, |
| getFirstVisibleColumn: function() { |
| return this.wot.wtViewport.columnsVisibleCalculator.startColumn; |
| }, |
| getLastRenderedRow: function() { |
| return this.wot.wtViewport.rowsRenderCalculator.endRow; |
| }, |
| getLastVisibleRow: function() { |
| return this.wot.wtViewport.rowsVisibleCalculator.endRow; |
| }, |
| getLastRenderedColumn: function() { |
| return this.wot.wtViewport.columnsRenderCalculator.endColumn; |
| }, |
| getLastVisibleColumn: function() { |
| return this.wot.wtViewport.columnsVisibleCalculator.endColumn; |
| }, |
| isRowBeforeRenderedRows: function(row) { |
| return (this.rowFilter.sourceToRendered(row) < 0 && row >= 0); |
| }, |
| isRowAfterViewport: function(row) { |
| return (this.rowFilter.sourceToRendered(row) > this.getLastVisibleRow()); |
| }, |
| isRowAfterRenderedRows: function(row) { |
| return (this.rowFilter.sourceToRendered(row) > this.getLastRenderedRow()); |
| }, |
| isColumnBeforeViewport: function(column) { |
| return this.columnFilter.sourceToRendered(column) < 0 && column >= 0; |
| }, |
| isColumnAfterViewport: function(column) { |
| return (this.columnFilter.sourceToRendered(column) > this.getLastVisibleColumn()); |
| }, |
| isLastRowFullyVisible: function() { |
| return this.getLastVisibleRow() === this.getLastRenderedRow(); |
| }, |
| isLastColumnFullyVisible: function() { |
| return this.getLastVisibleColumn() === this.getLastRenderedColumn(); |
| }, |
| getRenderedColumnsCount: function() { |
| var columnsCount = this.wot.wtViewport.columnsRenderCalculator.count; |
| var totalColumns = this.wot.getSetting('totalColumns'); |
| if (this.wot.isOverlayName(WalkontableOverlay.CLONE_DEBUG)) { |
| columnsCount = totalColumns; |
| } else if (this.wot.isOverlayName(WalkontableOverlay.CLONE_LEFT) || this.wot.isOverlayName(WalkontableOverlay.CLONE_TOP_LEFT_CORNER) || this.wot.isOverlayName(WalkontableOverlay.CLONE_BOTTOM_LEFT_CORNER)) { |
| return Math.min(this.wot.getSetting('fixedColumnsLeft'), totalColumns); |
| } |
| return columnsCount; |
| }, |
| getRenderedRowsCount: function() { |
| var rowsCount = this.wot.wtViewport.rowsRenderCalculator.count; |
| var totalRows = this.wot.getSetting('totalRows'); |
| if (this.wot.isOverlayName(WalkontableOverlay.CLONE_DEBUG)) { |
| rowsCount = totalRows; |
| } else if (this.wot.isOverlayName(WalkontableOverlay.CLONE_TOP) || this.wot.isOverlayName(WalkontableOverlay.CLONE_TOP_LEFT_CORNER)) { |
| rowsCount = Math.min(this.wot.getSetting('fixedRowsTop'), totalRows); |
| } else if (this.wot.isOverlayName(WalkontableOverlay.CLONE_BOTTOM) || this.wot.isOverlayName(WalkontableOverlay.CLONE_BOTTOM_LEFT_CORNER)) { |
| rowsCount = Math.min(this.wot.getSetting('fixedRowsBottom'), totalRows); |
| } |
| return rowsCount; |
| }, |
| getVisibleRowsCount: function() { |
| return this.wot.wtViewport.rowsVisibleCalculator.count; |
| }, |
| allRowsInViewport: function() { |
| return this.wot.getSetting('totalRows') == this.getVisibleRowsCount(); |
| }, |
| getRowHeight: function(sourceRow) { |
| var height = this.wot.wtSettings.settings.rowHeight(sourceRow); |
| var oversizedHeight = this.wot.wtViewport.oversizedRows[sourceRow]; |
| if (oversizedHeight !== void 0) { |
| height = height === void 0 ? oversizedHeight : Math.max(height, oversizedHeight); |
| } |
| return height; |
| }, |
| getColumnHeaderHeight: function(level) { |
| var height = this.wot.wtSettings.settings.defaultRowHeight; |
| var oversizedHeight = this.wot.wtViewport.oversizedColumnHeaders[level]; |
| if (oversizedHeight !== void 0) { |
| height = height ? Math.max(height, oversizedHeight) : oversizedHeight; |
| } |
| return height; |
| }, |
| getVisibleColumnsCount: function() { |
| return this.wot.wtViewport.columnsVisibleCalculator.count; |
| }, |
| allColumnsInViewport: function() { |
| return this.wot.getSetting('totalColumns') == this.getVisibleColumnsCount(); |
| }, |
| getColumnWidth: function(sourceColumn) { |
| var width = this.wot.wtSettings.settings.columnWidth; |
| if (typeof width === 'function') { |
| width = width(sourceColumn); |
| } else if (typeof width === 'object') { |
| width = width[sourceColumn]; |
| } |
| return width || this.wot.wtSettings.settings.defaultColumnWidth; |
| }, |
| getStretchedColumnWidth: function(sourceColumn) { |
| var columnWidth = this.getColumnWidth(sourceColumn); |
| var width = columnWidth == null ? this.instance.wtSettings.settings.defaultColumnWidth : columnWidth; |
| var calculator = this.wot.wtViewport.columnsRenderCalculator; |
| if (calculator) { |
| var stretchedWidth = calculator.getStretchedColumnWidth(sourceColumn, width); |
| if (stretchedWidth) { |
| width = stretchedWidth; |
| } |
| } |
| return width; |
| } |
| }, {}); |
| ; |
| window.WalkontableTable = WalkontableTable; |
| |
| //# |
| },{"cell/coords":6,"cell/range":7,"filter/column":10,"filter/row":11,"helpers/dom/element":47,"tableRenderer":22}],22:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableTableRenderer: {get: function() { |
| return WalkontableTableRenderer; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__; |
| var $__0 = ($___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__0.addClass, |
| empty = $__0.empty, |
| getScrollbarWidth = $__0.getScrollbarWidth, |
| hasClass = $__0.hasClass, |
| innerHeight = $__0.innerHeight, |
| outerWidth = $__0.outerWidth; |
| var performanceWarningAppeared = false; |
| var WalkontableTableRenderer = function WalkontableTableRenderer(wtTable) { |
| this.wtTable = wtTable; |
| this.wot = wtTable.instance; |
| this.instance = wtTable.instance; |
| this.rowFilter = wtTable.rowFilter; |
| this.columnFilter = wtTable.columnFilter; |
| this.TABLE = wtTable.TABLE; |
| this.THEAD = wtTable.THEAD; |
| this.TBODY = wtTable.TBODY; |
| this.COLGROUP = wtTable.COLGROUP; |
| this.rowHeaders = []; |
| this.rowHeaderCount = 0; |
| this.columnHeaders = []; |
| this.columnHeaderCount = 0; |
| this.fixedRowsTop = 0; |
| this.fixedRowsBottom = 0; |
| }; |
| ($traceurRuntime.createClass)(WalkontableTableRenderer, { |
| render: function() { |
| if (!this.wtTable.isWorkingOnClone()) { |
| this.wot.getSetting('beforeDraw', true); |
| } |
| this.rowHeaders = this.wot.getSetting('rowHeaders'); |
| this.rowHeaderCount = this.rowHeaders.length; |
| this.fixedRowsTop = this.wot.getSetting('fixedRowsTop'); |
| this.fixedRowsBottom = this.wot.getSetting('fixedRowsBottom'); |
| this.columnHeaders = this.wot.getSetting('columnHeaders'); |
| this.columnHeaderCount = this.columnHeaders.length; |
| var columnsToRender = this.wtTable.getRenderedColumnsCount(); |
| var rowsToRender = this.wtTable.getRenderedRowsCount(); |
| var totalColumns = this.wot.getSetting('totalColumns'); |
| var totalRows = this.wot.getSetting('totalRows'); |
| var workspaceWidth; |
| var adjusted = false; |
| if (WalkontableOverlay.isOverlayTypeOf(this.wot.cloneOverlay, WalkontableOverlay.CLONE_BOTTOM) || WalkontableOverlay.isOverlayTypeOf(this.wot.cloneOverlay, WalkontableOverlay.CLONE_BOTTOM_LEFT_CORNER)) { |
| this.columnHeaders = []; |
| this.columnHeaderCount = 0; |
| } |
| if (totalColumns >= 0) { |
| this.adjustAvailableNodes(); |
| adjusted = true; |
| this.renderColumnHeaders(); |
| this.renderRows(totalRows, rowsToRender, columnsToRender); |
| if (!this.wtTable.isWorkingOnClone()) { |
| workspaceWidth = this.wot.wtViewport.getWorkspaceWidth(); |
| this.wot.wtViewport.containerWidth = null; |
| } |
| this.adjustColumnWidths(columnsToRender); |
| this.markOversizedColumnHeaders(); |
| this.adjustColumnHeaderHeights(); |
| } |
| if (!adjusted) { |
| this.adjustAvailableNodes(); |
| } |
| this.removeRedundantRows(rowsToRender); |
| if (!this.wtTable.isWorkingOnClone() || this.wot.isOverlayName(WalkontableOverlay.CLONE_BOTTOM)) { |
| this.markOversizedRows(); |
| } |
| if (!this.wtTable.isWorkingOnClone()) { |
| this.wot.wtViewport.createVisibleCalculators(); |
| this.wot.wtOverlays.refresh(false); |
| var hiderWidth = outerWidth(this.wtTable.hider); |
| var tableWidth = outerWidth(this.wtTable.TABLE); |
| if (hiderWidth !== 0 && (tableWidth !== hiderWidth)) { |
| this.adjustColumnWidths(columnsToRender); |
| } |
| this.wot.wtOverlays.applyToDOM(); |
| if (workspaceWidth !== this.wot.wtViewport.getWorkspaceWidth()) { |
| this.wot.wtViewport.containerWidth = null; |
| var firstRendered = this.wtTable.getFirstRenderedColumn(); |
| var lastRendered = this.wtTable.getLastRenderedColumn(); |
| var rowHeaderWidthSetting = this.wot.getSetting('rowHeaderWidth'); |
| if (rowHeaderWidthSetting != null) { |
| for (var i = 0; i < this.rowHeaderCount; i++) { |
| this.COLGROUP.childNodes[i].style.width = (isNaN(rowHeaderWidthSetting) ? rowHeaderWidthSetting[i] : rowHeaderWidthSetting) + 'px'; |
| } |
| } |
| for (var i$__2 = firstRendered; i$__2 < lastRendered; i$__2++) { |
| var width = this.wtTable.getStretchedColumnWidth(i$__2); |
| var renderedIndex = this.columnFilter.sourceToRendered(i$__2); |
| this.COLGROUP.childNodes[renderedIndex + this.rowHeaderCount].style.width = width + 'px'; |
| } |
| } |
| this.wot.getSetting('onDraw', true); |
| } else if (this.wot.isOverlayName(WalkontableOverlay.CLONE_BOTTOM)) { |
| this.wot.cloneSource.wtOverlays.adjustElementsSize(); |
| } |
| }, |
| removeRedundantRows: function(renderedRowsCount) { |
| while (this.wtTable.tbodyChildrenLength > renderedRowsCount) { |
| this.TBODY.removeChild(this.TBODY.lastChild); |
| this.wtTable.tbodyChildrenLength--; |
| } |
| }, |
| renderRows: function(totalRows, rowsToRender, columnsToRender) { |
| var lastTD, |
| TR; |
| var visibleRowIndex = 0; |
| var sourceRowIndex = this.rowFilter.renderedToSource(visibleRowIndex); |
| var isWorkingOnClone = this.wtTable.isWorkingOnClone(); |
| while (sourceRowIndex < totalRows && sourceRowIndex >= 0) { |
| if (!performanceWarningAppeared && visibleRowIndex > 1000) { |
| performanceWarningAppeared = true; |
| console.warn('Performance tip: Handsontable rendered more than 1000 visible rows. Consider limiting the number ' + 'of rendered rows by specifying the table height and/or turning off the "renderAllRows" option.'); |
| } |
| if (rowsToRender !== void 0 && visibleRowIndex === rowsToRender) { |
| break; |
| } |
| TR = this.getOrCreateTrForRow(visibleRowIndex, TR); |
| this.renderRowHeaders(sourceRowIndex, TR); |
| this.adjustColumns(TR, columnsToRender + this.rowHeaderCount); |
| lastTD = this.renderCells(sourceRowIndex, TR, columnsToRender); |
| if (!isWorkingOnClone || this.wot.isOverlayName(WalkontableOverlay.CLONE_BOTTOM)) { |
| this.resetOversizedRow(sourceRowIndex); |
| } |
| if (TR.firstChild) { |
| var height = this.wot.wtTable.getRowHeight(sourceRowIndex); |
| if (height) { |
| height--; |
| TR.firstChild.style.height = height + 'px'; |
| } else { |
| TR.firstChild.style.height = ''; |
| } |
| } |
| visibleRowIndex++; |
| sourceRowIndex = this.rowFilter.renderedToSource(visibleRowIndex); |
| } |
| }, |
| resetOversizedRow: function(sourceRow) { |
| if (this.wot.getSetting('externalRowCalculator')) { |
| return; |
| } |
| if (this.wot.wtViewport.oversizedRows && this.wot.wtViewport.oversizedRows[sourceRow]) { |
| this.wot.wtViewport.oversizedRows[sourceRow] = void 0; |
| } |
| }, |
| markOversizedRows: function() { |
| if (this.wot.getSetting('externalRowCalculator')) { |
| return; |
| } |
| var rowCount = this.instance.wtTable.TBODY.childNodes.length; |
| var expectedTableHeight = rowCount * this.instance.wtSettings.settings.defaultRowHeight; |
| var actualTableHeight = innerHeight(this.instance.wtTable.TBODY) - 1; |
| var previousRowHeight; |
| var rowInnerHeight; |
| var sourceRowIndex; |
| var currentTr; |
| var rowHeader; |
| var totalRows = this.instance.getSetting('totalRows'); |
| if (expectedTableHeight === actualTableHeight && !this.instance.getSetting('fixedRowsBottom')) { |
| return; |
| } |
| while (rowCount) { |
| rowCount--; |
| sourceRowIndex = this.instance.wtTable.rowFilter.renderedToSource(rowCount); |
| previousRowHeight = this.instance.wtTable.getRowHeight(sourceRowIndex); |
| currentTr = this.instance.wtTable.getTrForRow(sourceRowIndex); |
| rowHeader = currentTr.querySelector('th'); |
| if (rowHeader) { |
| rowInnerHeight = innerHeight(rowHeader); |
| } else { |
| rowInnerHeight = innerHeight(currentTr) - 1; |
| } |
| if ((!previousRowHeight && this.instance.wtSettings.settings.defaultRowHeight < rowInnerHeight || previousRowHeight < rowInnerHeight)) { |
| this.instance.wtViewport.oversizedRows[sourceRowIndex] = ++rowInnerHeight; |
| } |
| } |
| }, |
| markOversizedColumnHeaders: function() { |
| var overlayName = this.wot.getOverlayName(); |
| if (!this.columnHeaderCount || this.wot.wtViewport.hasOversizedColumnHeadersMarked[overlayName] || this.wtTable.isWorkingOnClone()) { |
| return; |
| } |
| var columnCount = this.wtTable.getRenderedColumnsCount(); |
| for (var i = 0; i < this.columnHeaderCount; i++) { |
| for (var renderedColumnIndex = (-1) * this.rowHeaderCount; renderedColumnIndex < columnCount; renderedColumnIndex++) { |
| this.markIfOversizedColumnHeader(renderedColumnIndex); |
| } |
| } |
| this.wot.wtViewport.hasOversizedColumnHeadersMarked[overlayName] = true; |
| }, |
| adjustColumnHeaderHeights: function() { |
| var columnHeaders = this.wot.getSetting('columnHeaders'); |
| var children = this.wot.wtTable.THEAD.childNodes; |
| var oversizedColumnHeaders = this.wot.wtViewport.oversizedColumnHeaders; |
| for (var i = 0, |
| len = columnHeaders.length; i < len; i++) { |
| if (oversizedColumnHeaders[i]) { |
| if (children[i].childNodes.length === 0) { |
| return; |
| } |
| children[i].childNodes[0].style.height = oversizedColumnHeaders[i] + 'px'; |
| } |
| } |
| }, |
| markIfOversizedColumnHeader: function(col) { |
| var sourceColIndex = this.wot.wtTable.columnFilter.renderedToSource(col); |
| var level = this.columnHeaderCount; |
| var defaultRowHeight = this.wot.wtSettings.settings.defaultRowHeight; |
| var previousColHeaderHeight; |
| var currentHeader; |
| var currentHeaderHeight; |
| var columnHeaderHeightSetting = this.wot.getSetting('columnHeaderHeight') || []; |
| while (level) { |
| level--; |
| previousColHeaderHeight = this.wot.wtTable.getColumnHeaderHeight(level); |
| currentHeader = this.wot.wtTable.getColumnHeader(sourceColIndex, level); |
| if (!currentHeader) { |
| continue; |
| } |
| currentHeaderHeight = innerHeight(currentHeader); |
| if (!previousColHeaderHeight && defaultRowHeight < currentHeaderHeight || previousColHeaderHeight < currentHeaderHeight) { |
| this.wot.wtViewport.oversizedColumnHeaders[level] = currentHeaderHeight; |
| } |
| if (Array.isArray(columnHeaderHeightSetting)) { |
| if (columnHeaderHeightSetting[level] != null) { |
| this.wot.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting[level]; |
| } |
| } else if (!isNaN(columnHeaderHeightSetting)) { |
| this.wot.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting; |
| } |
| if (this.wot.wtViewport.oversizedColumnHeaders[level] < (columnHeaderHeightSetting[level] || columnHeaderHeightSetting)) { |
| this.wot.wtViewport.oversizedColumnHeaders[level] = (columnHeaderHeightSetting[level] || columnHeaderHeightSetting); |
| } |
| } |
| }, |
| renderCells: function(sourceRowIndex, TR, columnsToRender) { |
| var TD; |
| var sourceColIndex; |
| for (var visibleColIndex = 0; visibleColIndex < columnsToRender; visibleColIndex++) { |
| sourceColIndex = this.columnFilter.renderedToSource(visibleColIndex); |
| if (visibleColIndex === 0) { |
| TD = TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(sourceColIndex)]; |
| } else { |
| TD = TD.nextSibling; |
| } |
| if (TD.nodeName == 'TH') { |
| TD = replaceThWithTd(TD, TR); |
| } |
| if (!hasClass(TD, 'hide')) { |
| TD.className = ''; |
| } |
| TD.removeAttribute('style'); |
| this.wot.wtSettings.settings.cellRenderer(sourceRowIndex, sourceColIndex, TD); |
| } |
| return TD; |
| }, |
| adjustColumnWidths: function(columnsToRender) { |
| var scrollbarCompensation = 0; |
| var sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot; |
| var mainHolder = sourceInstance.wtTable.holder; |
| if (mainHolder.offsetHeight < mainHolder.scrollHeight) { |
| scrollbarCompensation = getScrollbarWidth(); |
| } |
| this.wot.wtViewport.columnsRenderCalculator.refreshStretching(this.wot.wtViewport.getViewportWidth() - scrollbarCompensation); |
| var rowHeaderWidthSetting = this.wot.getSetting('rowHeaderWidth'); |
| if (rowHeaderWidthSetting != null) { |
| for (var i = 0; i < this.rowHeaderCount; i++) { |
| this.COLGROUP.childNodes[i].style.width = (isNaN(rowHeaderWidthSetting) ? rowHeaderWidthSetting[i] : rowHeaderWidthSetting) + 'px'; |
| } |
| } |
| for (var renderedColIndex = 0; renderedColIndex < columnsToRender; renderedColIndex++) { |
| var width = this.wtTable.getStretchedColumnWidth(this.columnFilter.renderedToSource(renderedColIndex)); |
| this.COLGROUP.childNodes[renderedColIndex + this.rowHeaderCount].style.width = width + 'px'; |
| } |
| }, |
| appendToTbody: function(TR) { |
| this.TBODY.appendChild(TR); |
| this.wtTable.tbodyChildrenLength++; |
| }, |
| getOrCreateTrForRow: function(rowIndex, currentTr) { |
| var TR; |
| if (rowIndex >= this.wtTable.tbodyChildrenLength) { |
| TR = this.createRow(); |
| this.appendToTbody(TR); |
| } else if (rowIndex === 0) { |
| TR = this.TBODY.firstChild; |
| } else { |
| TR = currentTr.nextSibling; |
| } |
| if (TR.className) { |
| TR.removeAttribute('class'); |
| } |
| return TR; |
| }, |
| createRow: function() { |
| var TR = document.createElement('TR'); |
| for (var visibleColIndex = 0; visibleColIndex < this.rowHeaderCount; visibleColIndex++) { |
| TR.appendChild(document.createElement('TH')); |
| } |
| return TR; |
| }, |
| renderRowHeader: function(row, col, TH) { |
| TH.className = ''; |
| TH.removeAttribute('style'); |
| this.rowHeaders[col](row, TH, col); |
| }, |
| renderRowHeaders: function(row, TR) { |
| for (var TH = TR.firstChild, |
| visibleColIndex = 0; visibleColIndex < this.rowHeaderCount; visibleColIndex++) { |
| if (!TH) { |
| TH = document.createElement('TH'); |
| TR.appendChild(TH); |
| } else if (TH.nodeName == 'TD') { |
| TH = replaceTdWithTh(TH, TR); |
| } |
| this.renderRowHeader(row, visibleColIndex, TH); |
| TH = TH.nextSibling; |
| } |
| }, |
| adjustAvailableNodes: function() { |
| this.adjustColGroups(); |
| this.adjustThead(); |
| }, |
| renderColumnHeaders: function() { |
| if (!this.columnHeaderCount) { |
| return; |
| } |
| var columnCount = this.wtTable.getRenderedColumnsCount(); |
| for (var i = 0; i < this.columnHeaderCount; i++) { |
| var TR = this.getTrForColumnHeaders(i); |
| for (var renderedColumnIndex = (-1) * this.rowHeaderCount; renderedColumnIndex < columnCount; renderedColumnIndex++) { |
| var sourceCol = this.columnFilter.renderedToSource(renderedColumnIndex); |
| this.renderColumnHeader(i, sourceCol, TR.childNodes[renderedColumnIndex + this.rowHeaderCount]); |
| } |
| } |
| }, |
| adjustColGroups: function() { |
| var columnCount = this.wtTable.getRenderedColumnsCount(); |
| while (this.wtTable.colgroupChildrenLength < columnCount + this.rowHeaderCount) { |
| this.COLGROUP.appendChild(document.createElement('COL')); |
| this.wtTable.colgroupChildrenLength++; |
| } |
| while (this.wtTable.colgroupChildrenLength > columnCount + this.rowHeaderCount) { |
| this.COLGROUP.removeChild(this.COLGROUP.lastChild); |
| this.wtTable.colgroupChildrenLength--; |
| } |
| if (this.rowHeaderCount) { |
| addClass(this.COLGROUP.childNodes[0], 'rowHeader'); |
| } |
| }, |
| adjustThead: function() { |
| var columnCount = this.wtTable.getRenderedColumnsCount(); |
| var TR = this.THEAD.firstChild; |
| if (this.columnHeaders.length) { |
| for (var i = 0, |
| len = this.columnHeaders.length; i < len; i++) { |
| TR = this.THEAD.childNodes[i]; |
| if (!TR) { |
| TR = document.createElement('TR'); |
| this.THEAD.appendChild(TR); |
| } |
| this.theadChildrenLength = TR.childNodes.length; |
| while (this.theadChildrenLength < columnCount + this.rowHeaderCount) { |
| TR.appendChild(document.createElement('TH')); |
| this.theadChildrenLength++; |
| } |
| while (this.theadChildrenLength > columnCount + this.rowHeaderCount) { |
| TR.removeChild(TR.lastChild); |
| this.theadChildrenLength--; |
| } |
| } |
| var theadChildrenLength = this.THEAD.childNodes.length; |
| if (theadChildrenLength > this.columnHeaders.length) { |
| for (var i$__3 = this.columnHeaders.length; i$__3 < theadChildrenLength; i$__3++) { |
| this.THEAD.removeChild(this.THEAD.lastChild); |
| } |
| } |
| } else if (TR) { |
| empty(TR); |
| } |
| }, |
| getTrForColumnHeaders: function(index) { |
| return this.THEAD.childNodes[index]; |
| }, |
| renderColumnHeader: function(row, col, TH) { |
| TH.className = ''; |
| TH.removeAttribute('style'); |
| return this.columnHeaders[row](col, TH, row); |
| }, |
| adjustColumns: function(TR, desiredCount) { |
| var count = TR.childNodes.length; |
| while (count < desiredCount) { |
| var TD = document.createElement('TD'); |
| TR.appendChild(TD); |
| count++; |
| } |
| while (count > desiredCount) { |
| TR.removeChild(TR.lastChild); |
| count--; |
| } |
| }, |
| removeRedundantColumns: function(columnsToRender) { |
| while (this.wtTable.tbodyChildrenLength > columnsToRender) { |
| this.TBODY.removeChild(this.TBODY.lastChild); |
| this.wtTable.tbodyChildrenLength--; |
| } |
| } |
| }, {}); |
| function replaceTdWithTh(TD, TR) { |
| var TH = document.createElement('TH'); |
| TR.insertBefore(TH, TD); |
| TR.removeChild(TD); |
| return TH; |
| } |
| function replaceThWithTd(TH, TR) { |
| var TD = document.createElement('TD'); |
| TR.insertBefore(TD, TH); |
| TR.removeChild(TH); |
| return TD; |
| } |
| ; |
| window.WalkontableTableRenderer = WalkontableTableRenderer; |
| |
| //# |
| },{"helpers/dom/element":47}],23:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| WalkontableViewport: {get: function() { |
| return WalkontableViewport; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47__46__46__47_eventManager__, |
| $__calculator_47_viewportColumns__, |
| $__calculator_47_viewportRows__; |
| var Handsontable = ($___46__46__47__46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47__46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| getScrollbarWidth = $__1.getScrollbarWidth, |
| getScrollTop = $__1.getScrollTop, |
| getStyle = $__1.getStyle, |
| offset = $__1.offset, |
| outerHeight = $__1.outerHeight, |
| outerWidth = $__1.outerWidth; |
| var EventManager = ($___46__46__47__46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47__46__46__47_eventManager__}).EventManager; |
| var WalkontableViewportColumnsCalculator = ($__calculator_47_viewportColumns__ = _dereq_("calculator/viewportColumns"), $__calculator_47_viewportColumns__ && $__calculator_47_viewportColumns__.__esModule && $__calculator_47_viewportColumns__ || {default: $__calculator_47_viewportColumns__}).WalkontableViewportColumnsCalculator; |
| var WalkontableViewportRowsCalculator = ($__calculator_47_viewportRows__ = _dereq_("calculator/viewportRows"), $__calculator_47_viewportRows__ && $__calculator_47_viewportRows__.__esModule && $__calculator_47_viewportRows__ || {default: $__calculator_47_viewportRows__}).WalkontableViewportRowsCalculator; |
| var WalkontableViewport = function WalkontableViewport(wotInstance) { |
| var $__5 = this; |
| this.wot = wotInstance; |
| this.instance = this.wot; |
| this.oversizedRows = []; |
| this.oversizedColumnHeaders = []; |
| this.hasOversizedColumnHeadersMarked = {}; |
| this.clientHeight = 0; |
| this.containerWidth = NaN; |
| this.rowHeaderWidth = NaN; |
| this.rowsVisibleCalculator = null; |
| this.columnsVisibleCalculator = null; |
| this.eventManager = new EventManager(this.wot); |
| this.eventManager.addEventListener(window, 'resize', (function() { |
| $__5.clientHeight = $__5.getWorkspaceHeight(); |
| })); |
| }; |
| ($traceurRuntime.createClass)(WalkontableViewport, { |
| getWorkspaceHeight: function() { |
| var trimmingContainer = this.instance.wtOverlays.topOverlay.trimmingContainer; |
| var elemHeight; |
| var height = 0; |
| if (trimmingContainer === window) { |
| height = document.documentElement.clientHeight; |
| } else { |
| elemHeight = outerHeight(trimmingContainer); |
| height = (elemHeight > 0 && trimmingContainer.clientHeight > 0) ? trimmingContainer.clientHeight : Infinity; |
| } |
| return height; |
| }, |
| getWorkspaceWidth: function() { |
| var width; |
| var totalColumns = this.wot.getSetting('totalColumns'); |
| var trimmingContainer = this.instance.wtOverlays.leftOverlay.trimmingContainer; |
| var overflow; |
| var stretchSetting = this.wot.getSetting('stretchH'); |
| var docOffsetWidth = document.documentElement.offsetWidth; |
| var preventOverflow = this.wot.getSetting('preventOverflow'); |
| if (preventOverflow) { |
| return outerWidth(this.instance.wtTable.wtRootElement); |
| } |
| if (Handsontable.freezeOverlays) { |
| width = Math.min(docOffsetWidth - this.getWorkspaceOffset().left, docOffsetWidth); |
| } else { |
| width = Math.min(this.getContainerFillWidth(), docOffsetWidth - this.getWorkspaceOffset().left, docOffsetWidth); |
| } |
| if (trimmingContainer === window && totalColumns > 0 && this.sumColumnWidths(0, totalColumns - 1) > width) { |
| return document.documentElement.clientWidth; |
| } |
| if (trimmingContainer !== window) { |
| overflow = getStyle(this.instance.wtOverlays.leftOverlay.trimmingContainer, 'overflow'); |
| if (overflow == 'scroll' || overflow == 'hidden' || overflow == 'auto') { |
| return Math.max(width, trimmingContainer.clientWidth); |
| } |
| } |
| if (stretchSetting === 'none' || !stretchSetting) { |
| return Math.max(width, outerWidth(this.instance.wtTable.TABLE)); |
| } else { |
| return width; |
| } |
| }, |
| hasVerticalScroll: function() { |
| return this.getWorkspaceActualHeight() > this.getWorkspaceHeight(); |
| }, |
| hasHorizontalScroll: function() { |
| return this.getWorkspaceActualWidth() > this.getWorkspaceWidth(); |
| }, |
| sumColumnWidths: function(from, length) { |
| var sum = 0; |
| while (from < length) { |
| sum += this.wot.wtTable.getColumnWidth(from); |
| from++; |
| } |
| return sum; |
| }, |
| getContainerFillWidth: function() { |
| if (this.containerWidth) { |
| return this.containerWidth; |
| } |
| var mainContainer = this.instance.wtTable.holder; |
| var fillWidth; |
| var dummyElement; |
| dummyElement = document.createElement('div'); |
| dummyElement.style.width = '100%'; |
| dummyElement.style.height = '1px'; |
| mainContainer.appendChild(dummyElement); |
| fillWidth = dummyElement.offsetWidth; |
| this.containerWidth = fillWidth; |
| mainContainer.removeChild(dummyElement); |
| return fillWidth; |
| }, |
| getWorkspaceOffset: function() { |
| return offset(this.wot.wtTable.TABLE); |
| }, |
| getWorkspaceActualHeight: function() { |
| return outerHeight(this.wot.wtTable.TABLE); |
| }, |
| getWorkspaceActualWidth: function() { |
| return outerWidth(this.wot.wtTable.TABLE) || outerWidth(this.wot.wtTable.TBODY) || outerWidth(this.wot.wtTable.THEAD); |
| }, |
| getColumnHeaderHeight: function() { |
| if (isNaN(this.columnHeaderHeight)) { |
| this.columnHeaderHeight = outerHeight(this.wot.wtTable.THEAD); |
| } |
| return this.columnHeaderHeight; |
| }, |
| getViewportHeight: function() { |
| var containerHeight = this.getWorkspaceHeight(); |
| var columnHeaderHeight; |
| if (containerHeight === Infinity) { |
| return containerHeight; |
| } |
| columnHeaderHeight = this.getColumnHeaderHeight(); |
| if (columnHeaderHeight > 0) { |
| containerHeight -= columnHeaderHeight; |
| } |
| return containerHeight; |
| }, |
| getRowHeaderWidth: function() { |
| var rowHeadersHeightSetting = this.instance.getSetting('rowHeaderWidth'); |
| var rowHeaders = this.instance.getSetting('rowHeaders'); |
| if (rowHeadersHeightSetting) { |
| this.rowHeaderWidth = 0; |
| for (var i = 0, |
| len = rowHeaders.length; i < len; i++) { |
| this.rowHeaderWidth += rowHeadersHeightSetting[i] || rowHeadersHeightSetting; |
| } |
| } |
| if (this.wot.cloneSource) { |
| return this.wot.cloneSource.wtViewport.getRowHeaderWidth(); |
| } |
| if (isNaN(this.rowHeaderWidth)) { |
| if (rowHeaders.length) { |
| var TH = this.instance.wtTable.TABLE.querySelector('TH'); |
| this.rowHeaderWidth = 0; |
| for (var i$__7 = 0, |
| len$__8 = rowHeaders.length; i$__7 < len$__8; i$__7++) { |
| if (TH) { |
| this.rowHeaderWidth += outerWidth(TH); |
| TH = TH.nextSibling; |
| } else { |
| this.rowHeaderWidth += 50; |
| } |
| } |
| } else { |
| this.rowHeaderWidth = 0; |
| } |
| } |
| return this.rowHeaderWidth; |
| }, |
| getViewportWidth: function() { |
| var containerWidth = this.getWorkspaceWidth(); |
| var rowHeaderWidth; |
| if (containerWidth === Infinity) { |
| return containerWidth; |
| } |
| rowHeaderWidth = this.getRowHeaderWidth(); |
| if (rowHeaderWidth > 0) { |
| return containerWidth - rowHeaderWidth; |
| } |
| return containerWidth; |
| }, |
| createRowsCalculator: function() { |
| var visible = arguments[0] !== (void 0) ? arguments[0] : false; |
| var $__5 = this; |
| var height; |
| var pos; |
| var fixedRowsTop; |
| var scrollbarHeight; |
| var fixedRowsBottom; |
| var fixedRowsHeight; |
| var totalRows; |
| this.rowHeaderWidth = NaN; |
| if (this.wot.wtSettings.settings.renderAllRows) { |
| height = Infinity; |
| } else { |
| height = this.getViewportHeight(); |
| } |
| pos = this.wot.wtOverlays.topOverlay.getScrollPosition() - this.wot.wtOverlays.topOverlay.getTableParentOffset(); |
| if (pos < 0) { |
| pos = 0; |
| } |
| fixedRowsTop = this.wot.getSetting('fixedRowsTop'); |
| fixedRowsBottom = this.wot.getSetting('fixedRowsBottom'); |
| totalRows = this.wot.getSetting('totalRows'); |
| if (fixedRowsTop) { |
| fixedRowsHeight = this.wot.wtOverlays.topOverlay.sumCellSizes(0, fixedRowsTop); |
| pos += fixedRowsHeight; |
| height -= fixedRowsHeight; |
| } |
| if (fixedRowsBottom && this.wot.wtOverlays.bottomOverlay.clone) { |
| fixedRowsHeight = this.wot.wtOverlays.bottomOverlay.sumCellSizes(totalRows - fixedRowsBottom, totalRows); |
| height -= fixedRowsHeight; |
| } |
| if (this.wot.wtTable.holder.clientHeight === this.wot.wtTable.holder.offsetHeight) { |
| scrollbarHeight = 0; |
| } else { |
| scrollbarHeight = getScrollbarWidth(); |
| } |
| return new WalkontableViewportRowsCalculator(height, pos, this.wot.getSetting('totalRows'), (function(sourceRow) { |
| return $__5.wot.wtTable.getRowHeight(sourceRow); |
| }), visible ? null : this.wot.wtSettings.settings.viewportRowCalculatorOverride, visible, scrollbarHeight); |
| }, |
| createColumnsCalculator: function() { |
| var visible = arguments[0] !== (void 0) ? arguments[0] : false; |
| var $__5 = this; |
| var width = this.getViewportWidth(); |
| var pos; |
| var fixedColumnsLeft; |
| this.columnHeaderHeight = NaN; |
| pos = this.wot.wtOverlays.leftOverlay.getScrollPosition() - this.wot.wtOverlays.leftOverlay.getTableParentOffset(); |
| if (pos < 0) { |
| pos = 0; |
| } |
| fixedColumnsLeft = this.wot.getSetting('fixedColumnsLeft'); |
| if (fixedColumnsLeft) { |
| var fixedColumnsWidth = this.wot.wtOverlays.leftOverlay.sumCellSizes(0, fixedColumnsLeft); |
| pos += fixedColumnsWidth; |
| width -= fixedColumnsWidth; |
| } |
| if (this.wot.wtTable.holder.clientWidth !== this.wot.wtTable.holder.offsetWidth) { |
| width -= getScrollbarWidth(); |
| } |
| return new WalkontableViewportColumnsCalculator(width, pos, this.wot.getSetting('totalColumns'), (function(sourceCol) { |
| return $__5.wot.wtTable.getColumnWidth(sourceCol); |
| }), visible ? null : this.wot.wtSettings.settings.viewportColumnCalculatorOverride, visible, this.wot.getSetting('stretchH'), (function(stretchedWidth, column) { |
| return $__5.wot.getSetting('onBeforeStretchingColumnWidth', stretchedWidth, column); |
| })); |
| }, |
| createRenderCalculators: function() { |
| var fastDraw = arguments[0] !== (void 0) ? arguments[0] : false; |
| if (fastDraw) { |
| var proposedRowsVisibleCalculator = this.createRowsCalculator(true); |
| var proposedColumnsVisibleCalculator = this.createColumnsCalculator(true); |
| if (!(this.areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator) && this.areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator))) { |
| fastDraw = false; |
| } |
| } |
| if (!fastDraw) { |
| this.rowsRenderCalculator = this.createRowsCalculator(); |
| this.columnsRenderCalculator = this.createColumnsCalculator(); |
| } |
| this.rowsVisibleCalculator = null; |
| this.columnsVisibleCalculator = null; |
| return fastDraw; |
| }, |
| createVisibleCalculators: function() { |
| this.rowsVisibleCalculator = this.createRowsCalculator(true); |
| this.columnsVisibleCalculator = this.createColumnsCalculator(true); |
| }, |
| areAllProposedVisibleRowsAlreadyRendered: function(proposedRowsVisibleCalculator) { |
| if (this.rowsVisibleCalculator) { |
| if (proposedRowsVisibleCalculator.startRow < this.rowsRenderCalculator.startRow || (proposedRowsVisibleCalculator.startRow === this.rowsRenderCalculator.startRow && proposedRowsVisibleCalculator.startRow > 0)) { |
| return false; |
| } else if (proposedRowsVisibleCalculator.endRow > this.rowsRenderCalculator.endRow || (proposedRowsVisibleCalculator.endRow === this.rowsRenderCalculator.endRow && proposedRowsVisibleCalculator.endRow < this.wot.getSetting('totalRows') - 1)) { |
| return false; |
| } else { |
| return true; |
| } |
| } |
| return false; |
| }, |
| areAllProposedVisibleColumnsAlreadyRendered: function(proposedColumnsVisibleCalculator) { |
| if (this.columnsVisibleCalculator) { |
| if (proposedColumnsVisibleCalculator.startColumn < this.columnsRenderCalculator.startColumn || (proposedColumnsVisibleCalculator.startColumn === this.columnsRenderCalculator.startColumn && proposedColumnsVisibleCalculator.startColumn > 0)) { |
| return false; |
| } else if (proposedColumnsVisibleCalculator.endColumn > this.columnsRenderCalculator.endColumn || (proposedColumnsVisibleCalculator.endColumn === this.columnsRenderCalculator.endColumn && proposedColumnsVisibleCalculator.endColumn < this.wot.getSetting('totalColumns') - 1)) { |
| return false; |
| } else { |
| return true; |
| } |
| } |
| return false; |
| } |
| }, {}); |
| ; |
| window.WalkontableViewport = WalkontableViewport; |
| |
| //# |
| },{"browser":24,"calculator/viewportColumns":4,"calculator/viewportRows":5,"eventManager":42,"helpers/dom/element":47}],24:[function(_dereq_,module,exports){ |
| "use strict"; |
| var $__shims_47_runtime__, |
| $__es6collections__, |
| $__pluginHooks__, |
| $__numbro__, |
| $__moment__, |
| $__core__, |
| $__renderers_47__95_cellDecorator__, |
| $__cellTypes__, |
| $___46__46__47_plugins_47_jqueryHandsontable__, |
| $__helpers_47_array__, |
| $__helpers_47_browser__, |
| $__helpers_47_data__, |
| $__helpers_47_date__, |
| $__helpers_47_feature__, |
| $__helpers_47_function__, |
| $__helpers_47_mixed__, |
| $__helpers_47_number__, |
| $__helpers_47_object__, |
| $__helpers_47_setting__, |
| $__helpers_47_string__, |
| $__helpers_47_unicode__, |
| $__helpers_47_dom_47_element__, |
| $__helpers_47_dom_47_event__, |
| $__plugins__; |
| function Handsontable(rootElement, userSettings) { |
| var instance = new Handsontable.Core(rootElement, userSettings || {}); |
| instance.init(); |
| return instance; |
| } |
| module.exports = Handsontable; |
| Handsontable.utils = {}; |
| ($__shims_47_runtime__ = _dereq_("shims/runtime"), $__shims_47_runtime__ && $__shims_47_runtime__.__esModule && $__shims_47_runtime__ || {default: $__shims_47_runtime__}); |
| ($__es6collections__ = _dereq_("es6collections"), $__es6collections__ && $__es6collections__.__esModule && $__es6collections__ || {default: $__es6collections__}); |
| var Hooks = ($__pluginHooks__ = _dereq_("pluginHooks"), $__pluginHooks__ && $__pluginHooks__.__esModule && $__pluginHooks__ || {default: $__pluginHooks__}).Hooks; |
| var numbro = ($__numbro__ = _dereq_("numbro"), $__numbro__ && $__numbro__.__esModule && $__numbro__ || {default: $__numbro__}).default; |
| var moment = ($__moment__ = _dereq_("moment"), $__moment__ && $__moment__.__esModule && $__moment__ || {default: $__moment__}).default; |
| if (typeof window === 'object') { |
| if (typeof window.numbro === 'undefined') { |
| window.numbro = numbro; |
| } |
| if (typeof window.moment === 'undefined') { |
| window.moment = moment; |
| } |
| } |
| if (!Handsontable.hooks) { |
| Handsontable.hooks = new Hooks(); |
| } |
| Handsontable.utils.Hooks = Hooks; |
| ($__core__ = _dereq_("core"), $__core__ && $__core__.__esModule && $__core__ || {default: $__core__}); |
| ($__renderers_47__95_cellDecorator__ = _dereq_("renderers/_cellDecorator"), $__renderers_47__95_cellDecorator__ && $__renderers_47__95_cellDecorator__.__esModule && $__renderers_47__95_cellDecorator__ || {default: $__renderers_47__95_cellDecorator__}); |
| ($__cellTypes__ = _dereq_("cellTypes"), $__cellTypes__ && $__cellTypes__.__esModule && $__cellTypes__ || {default: $__cellTypes__}); |
| ($___46__46__47_plugins_47_jqueryHandsontable__ = _dereq_("plugins/jqueryHandsontable"), $___46__46__47_plugins_47_jqueryHandsontable__ && $___46__46__47_plugins_47_jqueryHandsontable__.__esModule && $___46__46__47_plugins_47_jqueryHandsontable__ || {default: $___46__46__47_plugins_47_jqueryHandsontable__}); |
| var arrayHelpers = ($__helpers_47_array__ = _dereq_("helpers/array"), $__helpers_47_array__ && $__helpers_47_array__.__esModule && $__helpers_47_array__ || {default: $__helpers_47_array__}); |
| var browserHelpers = ($__helpers_47_browser__ = _dereq_("helpers/browser"), $__helpers_47_browser__ && $__helpers_47_browser__.__esModule && $__helpers_47_browser__ || {default: $__helpers_47_browser__}); |
| var dataHelpers = ($__helpers_47_data__ = _dereq_("helpers/data"), $__helpers_47_data__ && $__helpers_47_data__.__esModule && $__helpers_47_data__ || {default: $__helpers_47_data__}); |
| var dateHelpers = ($__helpers_47_date__ = _dereq_("helpers/date"), $__helpers_47_date__ && $__helpers_47_date__.__esModule && $__helpers_47_date__ || {default: $__helpers_47_date__}); |
| var featureHelpers = ($__helpers_47_feature__ = _dereq_("helpers/feature"), $__helpers_47_feature__ && $__helpers_47_feature__.__esModule && $__helpers_47_feature__ || {default: $__helpers_47_feature__}); |
| var functionHelpers = ($__helpers_47_function__ = _dereq_("helpers/function"), $__helpers_47_function__ && $__helpers_47_function__.__esModule && $__helpers_47_function__ || {default: $__helpers_47_function__}); |
| var mixedHelpers = ($__helpers_47_mixed__ = _dereq_("helpers/mixed"), $__helpers_47_mixed__ && $__helpers_47_mixed__.__esModule && $__helpers_47_mixed__ || {default: $__helpers_47_mixed__}); |
| var numberHelpers = ($__helpers_47_number__ = _dereq_("helpers/number"), $__helpers_47_number__ && $__helpers_47_number__.__esModule && $__helpers_47_number__ || {default: $__helpers_47_number__}); |
| var objectHelpers = ($__helpers_47_object__ = _dereq_("helpers/object"), $__helpers_47_object__ && $__helpers_47_object__.__esModule && $__helpers_47_object__ || {default: $__helpers_47_object__}); |
| var settingHelpers = ($__helpers_47_setting__ = _dereq_("helpers/setting"), $__helpers_47_setting__ && $__helpers_47_setting__.__esModule && $__helpers_47_setting__ || {default: $__helpers_47_setting__}); |
| var stringHelpers = ($__helpers_47_string__ = _dereq_("helpers/string"), $__helpers_47_string__ && $__helpers_47_string__.__esModule && $__helpers_47_string__ || {default: $__helpers_47_string__}); |
| var unicodeHelpers = ($__helpers_47_unicode__ = _dereq_("helpers/unicode"), $__helpers_47_unicode__ && $__helpers_47_unicode__.__esModule && $__helpers_47_unicode__ || {default: $__helpers_47_unicode__}); |
| var domHelpers = ($__helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $__helpers_47_dom_47_element__ && $__helpers_47_dom_47_element__.__esModule && $__helpers_47_dom_47_element__ || {default: $__helpers_47_dom_47_element__}); |
| var domEventHelpers = ($__helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $__helpers_47_dom_47_event__ && $__helpers_47_dom_47_event__.__esModule && $__helpers_47_dom_47_event__ || {default: $__helpers_47_dom_47_event__}); |
| var HELPERS = [arrayHelpers, browserHelpers, dataHelpers, dateHelpers, featureHelpers, functionHelpers, mixedHelpers, numberHelpers, objectHelpers, settingHelpers, stringHelpers, unicodeHelpers]; |
| var DOM = [domHelpers, domEventHelpers]; |
| Handsontable.buildDate = 'Wed Jul 27 2016 12:03:17 GMT+0200 (CEST)'; |
| Handsontable.packageName = 'handsontable'; |
| Handsontable.version = '0.26.1'; |
| var baseVersion = '@@baseVersion'; |
| if (!/^@@/.test(baseVersion)) { |
| Handsontable.baseVersion = baseVersion; |
| } |
| Handsontable.plugins = {}; |
| var registerPlugin = ($__plugins__ = _dereq_("plugins"), $__plugins__ && $__plugins__.__esModule && $__plugins__ || {default: $__plugins__}).registerPlugin; |
| Handsontable.plugins.registerPlugin = registerPlugin; |
| Handsontable.helper = {}; |
| Handsontable.dom = {}; |
| Handsontable.Dom = Handsontable.dom; |
| arrayHelpers.arrayEach(HELPERS, (function(helper) { |
| arrayHelpers.arrayEach(Object.getOwnPropertyNames(helper), (function(key) { |
| if (key.charAt(0) !== '_') { |
| Handsontable.helper[key] = helper[key]; |
| } |
| })); |
| })); |
| arrayHelpers.arrayEach(DOM, (function(helper) { |
| arrayHelpers.arrayEach(Object.getOwnPropertyNames(helper), (function(key) { |
| if (key.charAt(0) !== '_') { |
| Handsontable.dom[key] = helper[key]; |
| } |
| })); |
| })); |
| |
| //# |
| },{"cellTypes":25,"core":26,"es6collections":"es6collections","helpers/array":43,"helpers/browser":44,"helpers/data":45,"helpers/date":46,"helpers/dom/element":47,"helpers/dom/event":48,"helpers/feature":49,"helpers/function":50,"helpers/mixed":51,"helpers/number":52,"helpers/object":53,"helpers/setting":54,"helpers/string":55,"helpers/unicode":56,"moment":"moment","numbro":"numbro","pluginHooks":59,"plugins":60,"plugins/jqueryHandsontable":2,"renderers/_cellDecorator":106,"shims/runtime":113}],25:[function(_dereq_,module,exports){ |
| "use strict"; |
| var $__helpers_47_browser__, |
| $__editors__, |
| $__renderers__, |
| $__editors_47_autocompleteEditor__, |
| $__editors_47_checkboxEditor__, |
| $__editors_47_dateEditor__, |
| $__editors_47_dropdownEditor__, |
| $__editors_47_handsontableEditor__, |
| $__editors_47_mobileTextEditor__, |
| $__editors_47_numericEditor__, |
| $__editors_47_passwordEditor__, |
| $__editors_47_selectEditor__, |
| $__editors_47_textEditor__, |
| $__renderers_47_autocompleteRenderer__, |
| $__renderers_47_checkboxRenderer__, |
| $__renderers_47_htmlRenderer__, |
| $__renderers_47_numericRenderer__, |
| $__renderers_47_passwordRenderer__, |
| $__renderers_47_textRenderer__, |
| $__validators_47_autocompleteValidator__, |
| $__validators_47_dateValidator__, |
| $__validators_47_timeValidator__, |
| $__validators_47_numericValidator__, |
| $__browser__; |
| var isMobileBrowser = ($__helpers_47_browser__ = _dereq_("helpers/browser"), $__helpers_47_browser__ && $__helpers_47_browser__.__esModule && $__helpers_47_browser__ || {default: $__helpers_47_browser__}).isMobileBrowser; |
| var getEditorConstructor = ($__editors__ = _dereq_("editors"), $__editors__ && $__editors__.__esModule && $__editors__ || {default: $__editors__}).getEditorConstructor; |
| var getRenderer = ($__renderers__ = _dereq_("renderers"), $__renderers__ && $__renderers__.__esModule && $__renderers__ || {default: $__renderers__}).getRenderer; |
| var AutocompleteEditor = ($__editors_47_autocompleteEditor__ = _dereq_("editors/autocompleteEditor"), $__editors_47_autocompleteEditor__ && $__editors_47_autocompleteEditor__.__esModule && $__editors_47_autocompleteEditor__ || {default: $__editors_47_autocompleteEditor__}).AutocompleteEditor; |
| var CheckboxEditor = ($__editors_47_checkboxEditor__ = _dereq_("editors/checkboxEditor"), $__editors_47_checkboxEditor__ && $__editors_47_checkboxEditor__.__esModule && $__editors_47_checkboxEditor__ || {default: $__editors_47_checkboxEditor__}).CheckboxEditor; |
| var DateEditor = ($__editors_47_dateEditor__ = _dereq_("editors/dateEditor"), $__editors_47_dateEditor__ && $__editors_47_dateEditor__.__esModule && $__editors_47_dateEditor__ || {default: $__editors_47_dateEditor__}).DateEditor; |
| var DropdownEditor = ($__editors_47_dropdownEditor__ = _dereq_("editors/dropdownEditor"), $__editors_47_dropdownEditor__ && $__editors_47_dropdownEditor__.__esModule && $__editors_47_dropdownEditor__ || {default: $__editors_47_dropdownEditor__}).DropdownEditor; |
| var HandsontableEditor = ($__editors_47_handsontableEditor__ = _dereq_("editors/handsontableEditor"), $__editors_47_handsontableEditor__ && $__editors_47_handsontableEditor__.__esModule && $__editors_47_handsontableEditor__ || {default: $__editors_47_handsontableEditor__}).HandsontableEditor; |
| var MobileTextEditor = ($__editors_47_mobileTextEditor__ = _dereq_("editors/mobileTextEditor"), $__editors_47_mobileTextEditor__ && $__editors_47_mobileTextEditor__.__esModule && $__editors_47_mobileTextEditor__ || {default: $__editors_47_mobileTextEditor__}).MobileTextEditor; |
| var NumericEditor = ($__editors_47_numericEditor__ = _dereq_("editors/numericEditor"), $__editors_47_numericEditor__ && $__editors_47_numericEditor__.__esModule && $__editors_47_numericEditor__ || {default: $__editors_47_numericEditor__}).NumericEditor; |
| var PasswordEditor = ($__editors_47_passwordEditor__ = _dereq_("editors/passwordEditor"), $__editors_47_passwordEditor__ && $__editors_47_passwordEditor__.__esModule && $__editors_47_passwordEditor__ || {default: $__editors_47_passwordEditor__}).PasswordEditor; |
| var SelectEditor = ($__editors_47_selectEditor__ = _dereq_("editors/selectEditor"), $__editors_47_selectEditor__ && $__editors_47_selectEditor__.__esModule && $__editors_47_selectEditor__ || {default: $__editors_47_selectEditor__}).SelectEditor; |
| var TextEditor = ($__editors_47_textEditor__ = _dereq_("editors/textEditor"), $__editors_47_textEditor__ && $__editors_47_textEditor__.__esModule && $__editors_47_textEditor__ || {default: $__editors_47_textEditor__}).TextEditor; |
| var AutocompleteRenderer = ($__renderers_47_autocompleteRenderer__ = _dereq_("renderers/autocompleteRenderer"), $__renderers_47_autocompleteRenderer__ && $__renderers_47_autocompleteRenderer__.__esModule && $__renderers_47_autocompleteRenderer__ || {default: $__renderers_47_autocompleteRenderer__}).AutocompleteRenderer; |
| var CheckboxRenderer = ($__renderers_47_checkboxRenderer__ = _dereq_("renderers/checkboxRenderer"), $__renderers_47_checkboxRenderer__ && $__renderers_47_checkboxRenderer__.__esModule && $__renderers_47_checkboxRenderer__ || {default: $__renderers_47_checkboxRenderer__}).CheckboxRenderer; |
| var HtmlRenderer = ($__renderers_47_htmlRenderer__ = _dereq_("renderers/htmlRenderer"), $__renderers_47_htmlRenderer__ && $__renderers_47_htmlRenderer__.__esModule && $__renderers_47_htmlRenderer__ || {default: $__renderers_47_htmlRenderer__}).HtmlRenderer; |
| var NumericRenderer = ($__renderers_47_numericRenderer__ = _dereq_("renderers/numericRenderer"), $__renderers_47_numericRenderer__ && $__renderers_47_numericRenderer__.__esModule && $__renderers_47_numericRenderer__ || {default: $__renderers_47_numericRenderer__}).NumericRenderer; |
| var PasswordRenderer = ($__renderers_47_passwordRenderer__ = _dereq_("renderers/passwordRenderer"), $__renderers_47_passwordRenderer__ && $__renderers_47_passwordRenderer__.__esModule && $__renderers_47_passwordRenderer__ || {default: $__renderers_47_passwordRenderer__}).PasswordRenderer; |
| var TextRenderer = ($__renderers_47_textRenderer__ = _dereq_("renderers/textRenderer"), $__renderers_47_textRenderer__ && $__renderers_47_textRenderer__.__esModule && $__renderers_47_textRenderer__ || {default: $__renderers_47_textRenderer__}).TextRenderer; |
| var AutocompleteValidator = ($__validators_47_autocompleteValidator__ = _dereq_("validators/autocompleteValidator"), $__validators_47_autocompleteValidator__ && $__validators_47_autocompleteValidator__.__esModule && $__validators_47_autocompleteValidator__ || {default: $__validators_47_autocompleteValidator__}).AutocompleteValidator; |
| var DateValidator = ($__validators_47_dateValidator__ = _dereq_("validators/dateValidator"), $__validators_47_dateValidator__ && $__validators_47_dateValidator__.__esModule && $__validators_47_dateValidator__ || {default: $__validators_47_dateValidator__}).DateValidator; |
| var TimeValidator = ($__validators_47_timeValidator__ = _dereq_("validators/timeValidator"), $__validators_47_timeValidator__ && $__validators_47_timeValidator__.__esModule && $__validators_47_timeValidator__ || {default: $__validators_47_timeValidator__}).TimeValidator; |
| var NumericValidator = ($__validators_47_numericValidator__ = _dereq_("validators/numericValidator"), $__validators_47_numericValidator__ && $__validators_47_numericValidator__.__esModule && $__validators_47_numericValidator__ || {default: $__validators_47_numericValidator__}).NumericValidator; |
| var Handsontable = ($__browser__ = _dereq_("browser"), $__browser__ && $__browser__.__esModule && $__browser__ || {default: $__browser__}).default; |
| Handsontable.AutocompleteCell = { |
| editor: getEditorConstructor('autocomplete'), |
| renderer: getRenderer('autocomplete'), |
| validator: Handsontable.AutocompleteValidator |
| }; |
| Handsontable.CheckboxCell = { |
| editor: getEditorConstructor('checkbox'), |
| renderer: getRenderer('checkbox') |
| }; |
| Handsontable.TextCell = { |
| editor: isMobileBrowser() ? getEditorConstructor('mobile') : getEditorConstructor('text'), |
| renderer: getRenderer('text') |
| }; |
| Handsontable.NumericCell = { |
| editor: getEditorConstructor('numeric'), |
| renderer: getRenderer('numeric'), |
| validator: Handsontable.NumericValidator, |
| dataType: 'number' |
| }; |
| Handsontable.DateCell = { |
| editor: getEditorConstructor('date'), |
| validator: Handsontable.DateValidator, |
| renderer: getRenderer('autocomplete') |
| }; |
| Handsontable.TimeCell = { |
| editor: getEditorConstructor('text'), |
| validator: Handsontable.TimeValidator, |
| renderer: getRenderer('text') |
| }; |
| Handsontable.HandsontableCell = { |
| editor: getEditorConstructor('handsontable'), |
| renderer: getRenderer('autocomplete') |
| }; |
| Handsontable.PasswordCell = { |
| editor: getEditorConstructor('password'), |
| renderer: getRenderer('password'), |
| copyable: false |
| }; |
| Handsontable.DropdownCell = { |
| editor: getEditorConstructor('dropdown'), |
| renderer: getRenderer('autocomplete'), |
| validator: Handsontable.AutocompleteValidator |
| }; |
| Handsontable.cellTypes = { |
| text: Handsontable.TextCell, |
| date: Handsontable.DateCell, |
| time: Handsontable.TimeCell, |
| numeric: Handsontable.NumericCell, |
| checkbox: Handsontable.CheckboxCell, |
| autocomplete: Handsontable.AutocompleteCell, |
| handsontable: Handsontable.HandsontableCell, |
| password: Handsontable.PasswordCell, |
| dropdown: Handsontable.DropdownCell |
| }; |
| Handsontable.cellLookup = {validator: { |
| numeric: Handsontable.NumericValidator, |
| autocomplete: Handsontable.AutocompleteValidator |
| }}; |
| |
| //# |
| },{"browser":24,"editors":30,"editors/autocompleteEditor":32,"editors/checkboxEditor":33,"editors/dateEditor":34,"editors/dropdownEditor":35,"editors/handsontableEditor":36,"editors/mobileTextEditor":37,"editors/numericEditor":38,"editors/passwordEditor":39,"editors/selectEditor":40,"editors/textEditor":41,"helpers/browser":44,"renderers":105,"renderers/autocompleteRenderer":107,"renderers/checkboxRenderer":108,"renderers/htmlRenderer":109,"renderers/numericRenderer":110,"renderers/passwordRenderer":111,"renderers/textRenderer":112,"validators/autocompleteValidator":118,"validators/dateValidator":119,"validators/numericValidator":120,"validators/timeValidator":121}],26:[function(_dereq_,module,exports){ |
| "use strict"; |
| var $__browser__, |
| $__numbro__, |
| $__helpers_47_dom_47_element__, |
| $__helpers_47_setting__, |
| $__helpers_47_function__, |
| $__helpers_47_mixed__, |
| $__helpers_47_browser__, |
| $__dataMap__, |
| $__editorManager__, |
| $__eventManager__, |
| $__helpers_47_object__, |
| $__helpers_47_array__, |
| $__plugins__, |
| $__renderers__, |
| $__helpers_47_string__, |
| $__helpers_47_number__, |
| $__tableView__, |
| $__dataSource__, |
| $__helpers_47_data__, |
| $__3rdparty_47_walkontable_47_src_47_cell_47_coords__, |
| $__3rdparty_47_walkontable_47_src_47_cell_47_range__, |
| $__3rdparty_47_walkontable_47_src_47_calculator_47_viewportColumns__; |
| var Handsontable = ($__browser__ = _dereq_("browser"), $__browser__ && $__browser__.__esModule && $__browser__ || {default: $__browser__}).default; |
| var numbro = ($__numbro__ = _dereq_("numbro"), $__numbro__ && $__numbro__.__esModule && $__numbro__ || {default: $__numbro__}).default; |
| var $__2 = ($__helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $__helpers_47_dom_47_element__ && $__helpers_47_dom_47_element__.__esModule && $__helpers_47_dom_47_element__ || {default: $__helpers_47_dom_47_element__}), |
| addClass = $__2.addClass, |
| empty = $__2.empty, |
| isChildOfWebComponentTable = $__2.isChildOfWebComponentTable, |
| removeClass = $__2.removeClass; |
| var columnFactory = ($__helpers_47_setting__ = _dereq_("helpers/setting"), $__helpers_47_setting__ && $__helpers_47_setting__.__esModule && $__helpers_47_setting__ || {default: $__helpers_47_setting__}).columnFactory; |
| var isFunction = ($__helpers_47_function__ = _dereq_("helpers/function"), $__helpers_47_function__ && $__helpers_47_function__.__esModule && $__helpers_47_function__ || {default: $__helpers_47_function__}).isFunction; |
| var $__5 = ($__helpers_47_mixed__ = _dereq_("helpers/mixed"), $__helpers_47_mixed__ && $__helpers_47_mixed__.__esModule && $__helpers_47_mixed__ || {default: $__helpers_47_mixed__}), |
| isDefined = $__5.isDefined, |
| isUndefined = $__5.isUndefined; |
| var isMobileBrowser = ($__helpers_47_browser__ = _dereq_("helpers/browser"), $__helpers_47_browser__ && $__helpers_47_browser__.__esModule && $__helpers_47_browser__ || {default: $__helpers_47_browser__}).isMobileBrowser; |
| var DataMap = ($__dataMap__ = _dereq_("dataMap"), $__dataMap__ && $__dataMap__.__esModule && $__dataMap__ || {default: $__dataMap__}).DataMap; |
| var EditorManager = ($__editorManager__ = _dereq_("editorManager"), $__editorManager__ && $__editorManager__.__esModule && $__editorManager__ || {default: $__editorManager__}).EditorManager; |
| var eventManagerObject = ($__eventManager__ = _dereq_("eventManager"), $__eventManager__ && $__eventManager__.__esModule && $__eventManager__ || {default: $__eventManager__}).eventManager; |
| var $__10 = ($__helpers_47_object__ = _dereq_("helpers/object"), $__helpers_47_object__ && $__helpers_47_object__.__esModule && $__helpers_47_object__ || {default: $__helpers_47_object__}), |
| deepClone = $__10.deepClone, |
| duckSchema = $__10.duckSchema, |
| extend = $__10.extend, |
| isObject = $__10.isObject, |
| isObjectEquals = $__10.isObjectEquals, |
| deepObjectSize = $__10.deepObjectSize; |
| var $__11 = ($__helpers_47_array__ = _dereq_("helpers/array"), $__helpers_47_array__ && $__helpers_47_array__.__esModule && $__helpers_47_array__ || {default: $__helpers_47_array__}), |
| arrayFlatten = $__11.arrayFlatten, |
| arrayMap = $__11.arrayMap; |
| var getPlugin = ($__plugins__ = _dereq_("plugins"), $__plugins__ && $__plugins__.__esModule && $__plugins__ || {default: $__plugins__}).getPlugin; |
| var getRenderer = ($__renderers__ = _dereq_("renderers"), $__renderers__ && $__renderers__.__esModule && $__renderers__ || {default: $__renderers__}).getRenderer; |
| var randomString = ($__helpers_47_string__ = _dereq_("helpers/string"), $__helpers_47_string__ && $__helpers_47_string__.__esModule && $__helpers_47_string__ || {default: $__helpers_47_string__}).randomString; |
| var rangeEach = ($__helpers_47_number__ = _dereq_("helpers/number"), $__helpers_47_number__ && $__helpers_47_number__.__esModule && $__helpers_47_number__ || {default: $__helpers_47_number__}).rangeEach; |
| var TableView = ($__tableView__ = _dereq_("tableView"), $__tableView__ && $__tableView__.__esModule && $__tableView__ || {default: $__tableView__}).TableView; |
| var DataSource = ($__dataSource__ = _dereq_("dataSource"), $__dataSource__ && $__dataSource__.__esModule && $__dataSource__ || {default: $__dataSource__}).DataSource; |
| var $__18 = ($__helpers_47_data__ = _dereq_("helpers/data"), $__helpers_47_data__ && $__helpers_47_data__.__esModule && $__helpers_47_data__ || {default: $__helpers_47_data__}), |
| translateRowsToColumns = $__18.translateRowsToColumns, |
| cellMethodLookupFactory = $__18.cellMethodLookupFactory, |
| spreadsheetColumnLabel = $__18.spreadsheetColumnLabel; |
| var WalkontableCellCoords = ($__3rdparty_47_walkontable_47_src_47_cell_47_coords__ = _dereq_("3rdparty/walkontable/src/cell/coords"), $__3rdparty_47_walkontable_47_src_47_cell_47_coords__ && $__3rdparty_47_walkontable_47_src_47_cell_47_coords__.__esModule && $__3rdparty_47_walkontable_47_src_47_cell_47_coords__ || {default: $__3rdparty_47_walkontable_47_src_47_cell_47_coords__}).WalkontableCellCoords; |
| var WalkontableCellRange = ($__3rdparty_47_walkontable_47_src_47_cell_47_range__ = _dereq_("3rdparty/walkontable/src/cell/range"), $__3rdparty_47_walkontable_47_src_47_cell_47_range__ && $__3rdparty_47_walkontable_47_src_47_cell_47_range__.__esModule && $__3rdparty_47_walkontable_47_src_47_cell_47_range__ || {default: $__3rdparty_47_walkontable_47_src_47_cell_47_range__}).WalkontableCellRange; |
| var WalkontableViewportColumnsCalculator = ($__3rdparty_47_walkontable_47_src_47_calculator_47_viewportColumns__ = _dereq_("3rdparty/walkontable/src/calculator/viewportColumns"), $__3rdparty_47_walkontable_47_src_47_calculator_47_viewportColumns__ && $__3rdparty_47_walkontable_47_src_47_calculator_47_viewportColumns__.__esModule && $__3rdparty_47_walkontable_47_src_47_calculator_47_viewportColumns__ || {default: $__3rdparty_47_walkontable_47_src_47_calculator_47_viewportColumns__}).WalkontableViewportColumnsCalculator; |
| Handsontable.activeGuid = null; |
| Handsontable.Core = function Core(rootElement, userSettings) { |
| var priv, |
| datamap, |
| dataSource, |
| grid, |
| selection, |
| editorManager, |
| instance = this, |
| GridSettings = function() {}, |
| eventManager = eventManagerObject(instance); |
| extend(GridSettings.prototype, DefaultSettings.prototype); |
| extend(GridSettings.prototype, userSettings); |
| extend(GridSettings.prototype, expandType(userSettings)); |
| this.rootElement = rootElement; |
| this.isHotTableEnv = isChildOfWebComponentTable(this.rootElement); |
| Handsontable.eventManager.isHotTableEnv = this.isHotTableEnv; |
| this.container = document.createElement('DIV'); |
| this.renderCall = false; |
| rootElement.insertBefore(this.container, rootElement.firstChild); |
| this.guid = 'ht_' + randomString(); |
| dataSource = new DataSource(instance); |
| if (!this.rootElement.id || this.rootElement.id.substring(0, 3) === 'ht_') { |
| this.rootElement.id = this.guid; |
| } |
| priv = { |
| cellSettings: [], |
| columnSettings: [], |
| columnsSettingConflicts: ['data', 'width'], |
| settings: new GridSettings(), |
| selRange: null, |
| isPopulated: null, |
| scrollable: null, |
| firstRun: true |
| }; |
| grid = { |
| alter: function(action, index, amount, source, keepEmptyRows) { |
| var delta; |
| amount = amount || 1; |
| function spliceWith(data, index, count, toInject) { |
| var valueFactory = (function() { |
| var result; |
| if (toInject === 'array') { |
| result = []; |
| } else if (toInject === 'object') { |
| result = {}; |
| } |
| return result; |
| }); |
| var spliceArgs = arrayMap(new Array(count), (function() { |
| return valueFactory(); |
| })); |
| spliceArgs.unshift(index, 0); |
| data.splice.apply(data, spliceArgs); |
| } |
| switch (action) { |
| case 'insert_row': |
| if (instance.getSettings().maxRows === instance.countSourceRows()) { |
| return; |
| } |
| delta = datamap.createRow(index, amount); |
| spliceWith(priv.cellSettings, index, amount, 'array'); |
| if (delta) { |
| if (selection.isSelected() && priv.selRange.from.row >= index) { |
| priv.selRange.from.row = priv.selRange.from.row + delta; |
| selection.transformEnd(delta, 0); |
| } else { |
| selection.refreshBorders(); |
| } |
| } |
| break; |
| case 'insert_col': |
| delta = datamap.createCol(index, amount); |
| for (var row = 0, |
| len = instance.countSourceRows(); row < len; row++) { |
| if (priv.cellSettings[row]) { |
| spliceWith(priv.cellSettings[row], index, amount); |
| } |
| } |
| if (delta) { |
| if (Array.isArray(instance.getSettings().colHeaders)) { |
| var spliceArray = [index, 0]; |
| spliceArray.length += delta; |
| Array.prototype.splice.apply(instance.getSettings().colHeaders, spliceArray); |
| } |
| if (selection.isSelected() && priv.selRange.from.col >= index) { |
| priv.selRange.from.col = priv.selRange.from.col + delta; |
| selection.transformEnd(0, delta); |
| } else { |
| selection.refreshBorders(); |
| } |
| } |
| break; |
| case 'remove_row': |
| datamap.removeRow(index, amount); |
| priv.cellSettings.splice(index, amount); |
| var totalRows = instance.countRows(); |
| var fixedRowsTop = instance.getSettings().fixedRowsTop; |
| if (fixedRowsTop >= index + 1) { |
| instance.getSettings().fixedRowsTop -= Math.min(amount, fixedRowsTop - index); |
| } |
| var fixedRowsBottom = instance.getSettings().fixedRowsBottom; |
| if (fixedRowsBottom && index >= totalRows - fixedRowsBottom) { |
| instance.getSettings().fixedRowsBottom -= Math.min(amount, fixedRowsBottom); |
| } |
| grid.adjustRowsAndCols(); |
| selection.refreshBorders(); |
| break; |
| case 'remove_col': |
| var logicalColumnIndex = translateColIndex(index); |
| datamap.removeCol(index, amount); |
| for (var row$__24 = 0, |
| len$__25 = instance.countSourceRows(); row$__24 < len$__25; row$__24++) { |
| if (priv.cellSettings[row$__24]) { |
| priv.cellSettings[row$__24].splice(logicalColumnIndex, amount); |
| } |
| } |
| var fixedColumnsLeft = instance.getSettings().fixedColumnsLeft; |
| if (fixedColumnsLeft >= index + 1) { |
| instance.getSettings().fixedColumnsLeft -= Math.min(amount, fixedColumnsLeft - index); |
| } |
| if (Array.isArray(instance.getSettings().colHeaders)) { |
| if (typeof logicalColumnIndex == 'undefined') { |
| logicalColumnIndex = -1; |
| } |
| instance.getSettings().colHeaders.splice(logicalColumnIndex, amount); |
| } |
| grid.adjustRowsAndCols(); |
| selection.refreshBorders(); |
| break; |
| default: |
| throw new Error('There is no such action "' + action + '"'); |
| } |
| if (!keepEmptyRows) { |
| grid.adjustRowsAndCols(); |
| } |
| }, |
| adjustRowsAndCols: function() { |
| if (priv.settings.minRows) { |
| var rows = instance.countRows(); |
| if (rows < priv.settings.minRows) { |
| for (var r = 0, |
| minRows = priv.settings.minRows; r < minRows - rows; r++) { |
| datamap.createRow(instance.countRows(), 1, true); |
| } |
| } |
| } |
| if (priv.settings.minSpareRows) { |
| var emptyRows = instance.countEmptyRows(true); |
| if (emptyRows < priv.settings.minSpareRows) { |
| for (; emptyRows < priv.settings.minSpareRows && instance.countRows() < priv.settings.maxRows; emptyRows++) { |
| datamap.createRow(instance.countRows(), 1, true); |
| } |
| } |
| } |
| { |
| var emptyCols; |
| if (priv.settings.minCols || priv.settings.minSpareCols) { |
| emptyCols = instance.countEmptyCols(true); |
| } |
| if (priv.settings.minCols && !priv.settings.columns && instance.countCols() < priv.settings.minCols) { |
| for (; instance.countCols() < priv.settings.minCols; emptyCols++) { |
| datamap.createCol(instance.countCols(), 1, true); |
| } |
| } |
| if (priv.settings.minSpareCols && !priv.settings.columns && instance.dataType === 'array' && emptyCols < priv.settings.minSpareCols) { |
| for (; emptyCols < priv.settings.minSpareCols && instance.countCols() < priv.settings.maxCols; emptyCols++) { |
| datamap.createCol(instance.countCols(), 1, true); |
| } |
| } |
| } |
| var rowCount = instance.countRows(); |
| var colCount = instance.countCols(); |
| if (rowCount === 0 || colCount === 0) { |
| selection.deselect(); |
| } |
| if (selection.isSelected()) { |
| var selectionChanged = false; |
| var fromRow = priv.selRange.from.row; |
| var fromCol = priv.selRange.from.col; |
| var toRow = priv.selRange.to.row; |
| var toCol = priv.selRange.to.col; |
| if (fromRow > rowCount - 1) { |
| fromRow = rowCount - 1; |
| selectionChanged = true; |
| if (toRow > fromRow) { |
| toRow = fromRow; |
| } |
| } else if (toRow > rowCount - 1) { |
| toRow = rowCount - 1; |
| selectionChanged = true; |
| if (fromRow > toRow) { |
| fromRow = toRow; |
| } |
| } |
| if (fromCol > colCount - 1) { |
| fromCol = colCount - 1; |
| selectionChanged = true; |
| if (toCol > fromCol) { |
| toCol = fromCol; |
| } |
| } else if (toCol > colCount - 1) { |
| toCol = colCount - 1; |
| selectionChanged = true; |
| if (fromCol > toCol) { |
| fromCol = toCol; |
| } |
| } |
| if (selectionChanged) { |
| instance.selectCell(fromRow, fromCol, toRow, toCol); |
| } |
| } |
| if (instance.view) { |
| instance.view.wt.wtOverlays.adjustElementsSize(); |
| } |
| }, |
| populateFromArray: function(start, input, end, source, method, direction, deltas) { |
| var r, |
| rlen, |
| c, |
| clen, |
| setData = [], |
| current = {}; |
| rlen = input.length; |
| if (rlen === 0) { |
| return false; |
| } |
| var repeatCol, |
| repeatRow, |
| cmax, |
| rmax, |
| baseEnd = { |
| row: end === null ? null : end.row, |
| col: end === null ? null : end.col |
| }; |
| switch (method) { |
| case 'shift_down': |
| repeatCol = end ? end.col - start.col + 1 : 0; |
| repeatRow = end ? end.row - start.row + 1 : 0; |
| input = translateRowsToColumns(input); |
| for (c = 0, clen = input.length, cmax = Math.max(clen, repeatCol); c < cmax; c++) { |
| if (c < clen) { |
| for (r = 0, rlen = input[c].length; r < repeatRow - rlen; r++) { |
| input[c].push(input[c][r % rlen]); |
| } |
| input[c].unshift(start.col + c, start.row, 0); |
| instance.spliceCol.apply(instance, input[c]); |
| } else { |
| input[c % clen][0] = start.col + c; |
| instance.spliceCol.apply(instance, input[c % clen]); |
| } |
| } |
| break; |
| case 'shift_right': |
| repeatCol = end ? end.col - start.col + 1 : 0; |
| repeatRow = end ? end.row - start.row + 1 : 0; |
| for (r = 0, rlen = input.length, rmax = Math.max(rlen, repeatRow); r < rmax; r++) { |
| if (r < rlen) { |
| for (c = 0, clen = input[r].length; c < repeatCol - clen; c++) { |
| input[r].push(input[r][c % clen]); |
| } |
| input[r].unshift(start.row + r, start.col, 0); |
| instance.spliceRow.apply(instance, input[r]); |
| } else { |
| input[r % rlen][0] = start.row + r; |
| instance.spliceRow.apply(instance, input[r % rlen]); |
| } |
| } |
| break; |
| case 'overwrite': |
| default: |
| current.row = start.row; |
| current.col = start.col; |
| var selected = { |
| row: (end && start) ? (end.row - start.row + 1) : 1, |
| col: (end && start) ? (end.col - start.col + 1) : 1 |
| }; |
| var skippedRow = 0; |
| var skippedColumn = 0; |
| var pushData = true; |
| var cellMeta; |
| var getInputValue = function getInputValue(row) { |
| var col = arguments[1] !== (void 0) ? arguments[1] : null; |
| var rowValue = input[row % input.length]; |
| if (col !== null) { |
| return rowValue[col % rowValue.length]; |
| } |
| return rowValue; |
| }; |
| var rowInputLength = input.length; |
| var rowSelectionLength = end ? end.row - start.row + 1 : 0; |
| if (end) { |
| rlen = rowSelectionLength; |
| } else { |
| rlen = Math.max(rowInputLength, rowSelectionLength); |
| } |
| for (r = 0; r < rlen; r++) { |
| if ((end && current.row > end.row && rowSelectionLength > rowInputLength) || (!priv.settings.allowInsertRow && current.row > instance.countRows() - 1) || (current.row >= priv.settings.maxRows)) { |
| break; |
| } |
| var logicalRow = r - skippedRow; |
| var colInputLength = getInputValue(logicalRow).length; |
| var colSelectionLength = end ? end.col - start.col + 1 : 0; |
| if (end) { |
| clen = colSelectionLength; |
| } else { |
| clen = Math.max(colInputLength, colSelectionLength); |
| } |
| current.col = start.col; |
| cellMeta = instance.getCellMeta(current.row, current.col); |
| if ((source === 'paste' || source === 'autofill') && cellMeta.skipRowOnPaste) { |
| skippedRow++; |
| current.row++; |
| rlen++; |
| continue; |
| } |
| skippedColumn = 0; |
| for (c = 0; c < clen; c++) { |
| if ((end && current.col > end.col && colSelectionLength > colInputLength) || (!priv.settings.allowInsertColumn && current.col > instance.countCols() - 1) || (current.col >= priv.settings.maxCols)) { |
| break; |
| } |
| cellMeta = instance.getCellMeta(current.row, current.col); |
| if ((source === 'paste' || source === 'autofill') && cellMeta.skipColumnOnPaste) { |
| skippedColumn++; |
| current.col++; |
| clen++; |
| continue; |
| } |
| if (cellMeta.readOnly) { |
| current.col++; |
| continue; |
| } |
| var logicalColumn = c - skippedColumn; |
| var value = getInputValue(logicalRow, logicalColumn); |
| var orgValue = instance.getDataAtCell(current.row, current.col); |
| var index = { |
| row: logicalRow, |
| col: logicalColumn |
| }; |
| if (source === 'autofill') { |
| var result = instance.runHooks('beforeAutofillInsidePopulate', index, direction, input, deltas, {}, selected); |
| if (result) { |
| value = isUndefined(result.value) ? value : result.value; |
| } |
| } |
| if (value !== null && typeof value === 'object') { |
| if (orgValue === null || typeof orgValue !== 'object') { |
| pushData = false; |
| } else { |
| var orgValueSchema = duckSchema(orgValue[0] || orgValue); |
| var valueSchema = duckSchema(value[0] || value); |
| if (isObjectEquals(orgValueSchema, valueSchema)) { |
| value = deepClone(value); |
| } else { |
| pushData = false; |
| } |
| } |
| } else if (orgValue !== null && typeof orgValue === 'object') { |
| pushData = false; |
| } |
| if (pushData) { |
| setData.push([current.row, current.col, value]); |
| } |
| pushData = true; |
| current.col++; |
| } |
| current.row++; |
| } |
| instance.setDataAtCell(setData, null, null, source || 'populateFromArray'); |
| break; |
| } |
| } |
| }; |
| this.selection = selection = { |
| inProgress: false, |
| selectedHeader: { |
| cols: false, |
| rows: false |
| }, |
| setSelectedHeaders: function() { |
| var rows = arguments[0] !== (void 0) ? arguments[0] : false; |
| var cols = arguments[1] !== (void 0) ? arguments[1] : false; |
| var corner = arguments[2] !== (void 0) ? arguments[2] : false; |
| instance.selection.selectedHeader.rows = rows; |
| instance.selection.selectedHeader.cols = cols; |
| instance.selection.selectedHeader.corner = corner; |
| }, |
| begin: function() { |
| instance.selection.inProgress = true; |
| }, |
| finish: function() { |
| var sel = instance.getSelected(); |
| Handsontable.hooks.run(instance, 'afterSelectionEnd', sel[0], sel[1], sel[2], sel[3]); |
| Handsontable.hooks.run(instance, 'afterSelectionEndByProp', sel[0], instance.colToProp(sel[1]), sel[2], instance.colToProp(sel[3])); |
| instance.selection.inProgress = false; |
| }, |
| isInProgress: function() { |
| return instance.selection.inProgress; |
| }, |
| setRangeStart: function(coords, keepEditorOpened) { |
| Handsontable.hooks.run(instance, 'beforeSetRangeStart', coords); |
| priv.selRange = new WalkontableCellRange(coords, coords, coords); |
| selection.setRangeEnd(coords, null, keepEditorOpened); |
| }, |
| setRangeStartOnly: function(coords) { |
| Handsontable.hooks.run(instance, 'beforeSetRangeStartOnly', coords); |
| priv.selRange = new WalkontableCellRange(coords, coords, coords); |
| }, |
| setRangeEnd: function(coords, scrollToCell, keepEditorOpened) { |
| if (priv.selRange === null) { |
| return; |
| } |
| var disableVisualSelection, |
| isHeaderSelected = false, |
| areCoordsPositive = true; |
| var firstVisibleRow = instance.view.wt.wtTable.getFirstVisibleRow(); |
| var firstVisibleColumn = instance.view.wt.wtTable.getFirstVisibleColumn(); |
| var newRangeCoords = { |
| row: null, |
| col: null |
| }; |
| Handsontable.hooks.run(instance, 'beforeSetRangeEnd', coords); |
| instance.selection.begin(); |
| newRangeCoords.row = coords.row < 0 ? firstVisibleRow : coords.row; |
| newRangeCoords.col = coords.col < 0 ? firstVisibleColumn : coords.col; |
| priv.selRange.to = new WalkontableCellCoords(newRangeCoords.row, newRangeCoords.col); |
| if (!priv.settings.multiSelect) { |
| priv.selRange.from = coords; |
| } |
| instance.view.wt.selections.current.clear(); |
| disableVisualSelection = instance.getCellMeta(priv.selRange.highlight.row, priv.selRange.highlight.col).disableVisualSelection; |
| if (typeof disableVisualSelection === 'string') { |
| disableVisualSelection = [disableVisualSelection]; |
| } |
| if (disableVisualSelection === false || Array.isArray(disableVisualSelection) && disableVisualSelection.indexOf('current') === -1) { |
| instance.view.wt.selections.current.add(priv.selRange.highlight); |
| } |
| instance.view.wt.selections.area.clear(); |
| if ((disableVisualSelection === false || Array.isArray(disableVisualSelection) && disableVisualSelection.indexOf('area') === -1) && selection.isMultiple()) { |
| instance.view.wt.selections.area.add(priv.selRange.from); |
| instance.view.wt.selections.area.add(priv.selRange.to); |
| } |
| if (priv.settings.currentRowClassName || priv.settings.currentColClassName) { |
| instance.view.wt.selections.highlight.clear(); |
| instance.view.wt.selections.highlight.add(priv.selRange.from); |
| instance.view.wt.selections.highlight.add(priv.selRange.to); |
| } |
| Handsontable.hooks.run(instance, 'afterSelection', priv.selRange.from.row, priv.selRange.from.col, priv.selRange.to.row, priv.selRange.to.col); |
| Handsontable.hooks.run(instance, 'afterSelectionByProp', priv.selRange.from.row, datamap.colToProp(priv.selRange.from.col), priv.selRange.to.row, datamap.colToProp(priv.selRange.to.col)); |
| if ((priv.selRange.from.row === 0 && priv.selRange.to.row === instance.countRows() - 1 && instance.countRows() > 1) || (priv.selRange.from.col === 0 && priv.selRange.to.col === instance.countCols() - 1 && instance.countCols() > 1)) { |
| isHeaderSelected = true; |
| } |
| if (coords.row < 0 || coords.col < 0) { |
| areCoordsPositive = false; |
| } |
| if (scrollToCell !== false && !isHeaderSelected && areCoordsPositive) { |
| if (priv.selRange.from && !selection.isMultiple()) { |
| instance.view.scrollViewport(priv.selRange.from); |
| } else { |
| instance.view.scrollViewport(coords); |
| } |
| } |
| selection.refreshBorders(null, keepEditorOpened); |
| }, |
| refreshBorders: function(revertOriginal, keepEditor) { |
| if (!keepEditor) { |
| editorManager.destroyEditor(revertOriginal); |
| } |
| instance.view.render(); |
| if (selection.isSelected() && !keepEditor) { |
| editorManager.prepareEditor(); |
| } |
| }, |
| isMultiple: function() { |
| var isMultiple = !(priv.selRange.to.col === priv.selRange.from.col && priv.selRange.to.row === priv.selRange.from.row), |
| modifier = Handsontable.hooks.run(instance, 'afterIsMultipleSelection', isMultiple); |
| if (isMultiple) { |
| return modifier; |
| } |
| }, |
| transformStart: function(rowDelta, colDelta, force, keepEditorOpened) { |
| var delta = new WalkontableCellCoords(rowDelta, colDelta), |
| rowTransformDir = 0, |
| colTransformDir = 0, |
| totalRows, |
| totalCols, |
| coords, |
| fixedRowsBottom; |
| instance.runHooks('modifyTransformStart', delta); |
| totalRows = instance.countRows(); |
| totalCols = instance.countCols(); |
| fixedRowsBottom = instance.getSettings().fixedRowsBottom; |
| if (priv.selRange.highlight.row + rowDelta > totalRows - 1) { |
| if (force && priv.settings.minSpareRows > 0 && !(fixedRowsBottom && priv.selRange.highlight.row >= totalRows - fixedRowsBottom - 1)) { |
| instance.alter('insert_row', totalRows); |
| totalRows = instance.countRows(); |
| } else if (priv.settings.autoWrapCol) { |
| delta.row = 1 - totalRows; |
| delta.col = priv.selRange.highlight.col + delta.col == totalCols - 1 ? 1 - totalCols : 1; |
| } |
| } else if (priv.settings.autoWrapCol && priv.selRange.highlight.row + delta.row < 0 && priv.selRange.highlight.col + delta.col >= 0) { |
| delta.row = totalRows - 1; |
| delta.col = priv.selRange.highlight.col + delta.col == 0 ? totalCols - 1 : -1; |
| } |
| if (priv.selRange.highlight.col + delta.col > totalCols - 1) { |
| if (force && priv.settings.minSpareCols > 0) { |
| instance.alter('insert_col', totalCols); |
| totalCols = instance.countCols(); |
| } else if (priv.settings.autoWrapRow) { |
| delta.row = priv.selRange.highlight.row + delta.row == totalRows - 1 ? 1 - totalRows : 1; |
| delta.col = 1 - totalCols; |
| } |
| } else if (priv.settings.autoWrapRow && priv.selRange.highlight.col + delta.col < 0 && priv.selRange.highlight.row + delta.row >= 0) { |
| delta.row = priv.selRange.highlight.row + delta.row == 0 ? totalRows - 1 : -1; |
| delta.col = totalCols - 1; |
| } |
| coords = new WalkontableCellCoords(priv.selRange.highlight.row + delta.row, priv.selRange.highlight.col + delta.col); |
| if (coords.row < 0) { |
| rowTransformDir = -1; |
| coords.row = 0; |
| } else if (coords.row > 0 && coords.row >= totalRows) { |
| rowTransformDir = 1; |
| coords.row = totalRows - 1; |
| } |
| if (coords.col < 0) { |
| colTransformDir = -1; |
| coords.col = 0; |
| } else if (coords.col > 0 && coords.col >= totalCols) { |
| colTransformDir = 1; |
| coords.col = totalCols - 1; |
| } |
| instance.runHooks('afterModifyTransformStart', coords, rowTransformDir, colTransformDir); |
| selection.setRangeStart(coords, keepEditorOpened); |
| }, |
| transformEnd: function(rowDelta, colDelta) { |
| var delta = new WalkontableCellCoords(rowDelta, colDelta), |
| rowTransformDir = 0, |
| colTransformDir = 0, |
| totalRows, |
| totalCols, |
| coords; |
| instance.runHooks('modifyTransformEnd', delta); |
| totalRows = instance.countRows(); |
| totalCols = instance.countCols(); |
| coords = new WalkontableCellCoords(priv.selRange.to.row + delta.row, priv.selRange.to.col + delta.col); |
| if (coords.row < 0) { |
| rowTransformDir = -1; |
| coords.row = 0; |
| } else if (coords.row > 0 && coords.row >= totalRows) { |
| rowTransformDir = 1; |
| coords.row = totalRows - 1; |
| } |
| if (coords.col < 0) { |
| colTransformDir = -1; |
| coords.col = 0; |
| } else if (coords.col > 0 && coords.col >= totalCols) { |
| colTransformDir = 1; |
| coords.col = totalCols - 1; |
| } |
| instance.runHooks('afterModifyTransformEnd', coords, rowTransformDir, colTransformDir); |
| selection.setRangeEnd(coords, true); |
| }, |
| isSelected: function() { |
| return (priv.selRange !== null); |
| }, |
| inInSelection: function(coords) { |
| if (!selection.isSelected()) { |
| return false; |
| } |
| return priv.selRange.includes(coords); |
| }, |
| deselect: function() { |
| if (!selection.isSelected()) { |
| return; |
| } |
| instance.selection.inProgress = false; |
| priv.selRange = null; |
| instance.view.wt.selections.current.clear(); |
| instance.view.wt.selections.area.clear(); |
| if (priv.settings.currentRowClassName || priv.settings.currentColClassName) { |
| instance.view.wt.selections.highlight.clear(); |
| } |
| editorManager.destroyEditor(); |
| selection.refreshBorders(); |
| Handsontable.hooks.run(instance, 'afterDeselect'); |
| }, |
| selectAll: function() { |
| if (!priv.settings.multiSelect) { |
| return; |
| } |
| selection.setRangeStart(new WalkontableCellCoords(0, 0)); |
| selection.setRangeEnd(new WalkontableCellCoords(instance.countRows() - 1, instance.countCols() - 1), false); |
| }, |
| empty: function() { |
| if (!selection.isSelected()) { |
| return; |
| } |
| var topLeft = priv.selRange.getTopLeftCorner(); |
| var bottomRight = priv.selRange.getBottomRightCorner(); |
| var r, |
| c, |
| changes = []; |
| for (r = topLeft.row; r <= bottomRight.row; r++) { |
| for (c = topLeft.col; c <= bottomRight.col; c++) { |
| if (!instance.getCellMeta(r, c).readOnly) { |
| changes.push([r, c, '']); |
| } |
| } |
| } |
| instance.setDataAtCell(changes); |
| } |
| }; |
| this.init = function() { |
| dataSource.setData(priv.settings.data); |
| Handsontable.hooks.run(instance, 'beforeInit'); |
| if (isMobileBrowser()) { |
| addClass(instance.rootElement, 'mobile'); |
| } |
| this.updateSettings(priv.settings, true); |
| this.view = new TableView(this); |
| editorManager = new EditorManager(instance, priv, selection, datamap); |
| this.forceFullRender = true; |
| Handsontable.hooks.run(instance, 'init'); |
| this.view.render(); |
| if (typeof priv.firstRun === 'object') { |
| Handsontable.hooks.run(instance, 'afterChange', priv.firstRun[0], priv.firstRun[1]); |
| priv.firstRun = false; |
| } |
| Handsontable.hooks.run(instance, 'afterInit'); |
| }; |
| function ValidatorsQueue() { |
| var resolved = false; |
| return { |
| validatorsInQueue: 0, |
| valid: true, |
| addValidatorToQueue: function() { |
| this.validatorsInQueue++; |
| resolved = false; |
| }, |
| removeValidatorFormQueue: function() { |
| this.validatorsInQueue = this.validatorsInQueue - 1 < 0 ? 0 : this.validatorsInQueue - 1; |
| this.checkIfQueueIsEmpty(); |
| }, |
| onQueueEmpty: function(valid) {}, |
| checkIfQueueIsEmpty: function() { |
| if (this.validatorsInQueue == 0 && resolved == false) { |
| resolved = true; |
| this.onQueueEmpty(this.valid); |
| } |
| } |
| }; |
| } |
| function validateChanges(changes, source, callback) { |
| var waitingForValidator = new ValidatorsQueue(); |
| waitingForValidator.onQueueEmpty = resolve; |
| for (var i = changes.length - 1; i >= 0; i--) { |
| if (changes[i] === null) { |
| changes.splice(i, 1); |
| } else { |
| var row = changes[i][0]; |
| var col = datamap.propToCol(changes[i][1]); |
| var cellProperties = instance.getCellMeta(row, col); |
| if (cellProperties.type === 'numeric' && typeof changes[i][3] === 'string') { |
| if (changes[i][3].length > 0 && (/^-?[\d\s]*(\.|\,)?\d*$/.test(changes[i][3]) || cellProperties.format)) { |
| var len = changes[i][3].length; |
| if (isUndefined(cellProperties.language)) { |
| numbro.culture('en-US'); |
| } else if (changes[i][3].indexOf('.') === len - 3 && changes[i][3].indexOf(',') === -1) { |
| numbro.culture('en-US'); |
| } else { |
| numbro.culture(cellProperties.language); |
| } |
| var delimiters = numbro.cultureData(numbro.culture()).delimiters; |
| if (new RegExp('^\\' + delimiters.decimal + '[0-9]+$').test(changes[i][3] + '')) { |
| changes[i][3] = '0' + changes[i][3]; |
| } |
| if (numbro.validate(changes[i][3]) || !isNaN(parseFloat(changes[i][3]))) { |
| changes[i][3] = numbro().unformat(changes[i][3]); |
| } |
| } |
| } |
| if (instance.getCellValidator(cellProperties)) { |
| waitingForValidator.addValidatorToQueue(); |
| instance.validateCell(changes[i][3], cellProperties, (function(i, cellProperties) { |
| return function(result) { |
| if (typeof result !== 'boolean') { |
| throw new Error('Validation error: result is not boolean'); |
| } |
| if (result === false && cellProperties.allowInvalid === false) { |
| changes.splice(i, 1); |
| cellProperties.valid = true; |
| --i; |
| } |
| waitingForValidator.removeValidatorFormQueue(); |
| }; |
| })(i, cellProperties), source); |
| } |
| } |
| } |
| waitingForValidator.checkIfQueueIsEmpty(); |
| function resolve() { |
| var beforeChangeResult; |
| if (changes.length) { |
| beforeChangeResult = Handsontable.hooks.run(instance, 'beforeChange', changes, source); |
| if (isFunction(beforeChangeResult)) { |
| console.warn('Your beforeChange callback returns a function. It\'s not supported since Handsontable 0.12.1 (and the returned function will not be executed).'); |
| } else if (beforeChangeResult === false) { |
| changes.splice(0, changes.length); |
| } |
| } |
| callback(); |
| } |
| } |
| function applyChanges(changes, source) { |
| var i = changes.length - 1; |
| if (i < 0) { |
| return; |
| } |
| for (; 0 <= i; i--) { |
| if (changes[i] === null) { |
| changes.splice(i, 1); |
| continue; |
| } |
| if (changes[i][2] == null && changes[i][3] == null) { |
| continue; |
| } |
| if (priv.settings.allowInsertRow) { |
| while (changes[i][0] > instance.countRows() - 1) { |
| datamap.createRow(); |
| } |
| } |
| if (instance.dataType === 'array' && (!priv.settings.columns || priv.settings.columns.length === 0) && priv.settings.allowInsertColumn) { |
| while (datamap.propToCol(changes[i][1]) > instance.countCols() - 1) { |
| datamap.createCol(); |
| } |
| } |
| datamap.set(changes[i][0], changes[i][1], changes[i][3]); |
| } |
| instance.forceFullRender = true; |
| grid.adjustRowsAndCols(); |
| Handsontable.hooks.run(instance, 'beforeChangeRender', changes, source); |
| selection.refreshBorders(null, true); |
| instance.view.wt.wtOverlays.adjustElementsSize(); |
| Handsontable.hooks.run(instance, 'afterChange', changes, source || 'edit'); |
| } |
| this.validateCell = function(value, cellProperties, callback, source) { |
| var validator = instance.getCellValidator(cellProperties); |
| function done(valid) { |
| var col = cellProperties.visualCol, |
| row = cellProperties.visualRow, |
| td = instance.getCell(row, col, true); |
| if (td && td.nodeName != 'TH') { |
| instance.view.wt.wtSettings.settings.cellRenderer(row, col, td); |
| } |
| callback(valid); |
| } |
| if (Object.prototype.toString.call(validator) === '[object RegExp]') { |
| validator = (function(validator) { |
| return function(value, callback) { |
| callback(validator.test(value)); |
| }; |
| })(validator); |
| } |
| if (isFunction(validator)) { |
| value = Handsontable.hooks.run(instance, 'beforeValidate', value, cellProperties.visualRow, cellProperties.prop, source); |
| instance._registerTimeout(setTimeout(function() { |
| validator.call(cellProperties, value, function(valid) { |
| valid = Handsontable.hooks.run(instance, 'afterValidate', valid, value, cellProperties.visualRow, cellProperties.prop, source); |
| cellProperties.valid = valid; |
| done(valid); |
| Handsontable.hooks.run(instance, 'postAfterValidate', valid, value, cellProperties.visualRow, cellProperties.prop, source); |
| }); |
| }, 0)); |
| } else { |
| instance._registerTimeout(setTimeout(function() { |
| cellProperties.valid = true; |
| done(cellProperties.valid); |
| }, 0)); |
| } |
| }; |
| function setDataInputToArray(row, propOrCol, value) { |
| if (typeof row === 'object') { |
| return row; |
| } else { |
| return [[row, propOrCol, value]]; |
| } |
| } |
| this.setDataAtCell = function(row, col, value, source) { |
| var input = setDataInputToArray(row, col, value), |
| i, |
| ilen, |
| changes = [], |
| prop; |
| for (i = 0, ilen = input.length; i < ilen; i++) { |
| if (typeof input[i] !== 'object') { |
| throw new Error('Method `setDataAtCell` accepts row number or changes array of arrays as its first parameter'); |
| } |
| if (typeof input[i][1] !== 'number') { |
| throw new Error('Method `setDataAtCell` accepts row and column number as its parameters. If you want to use object property name, use method `setDataAtRowProp`'); |
| } |
| prop = datamap.colToProp(input[i][1]); |
| changes.push([input[i][0], prop, datamap.get(input[i][0], prop), input[i][2]]); |
| } |
| if (!source && typeof row === 'object') { |
| source = col; |
| } |
| validateChanges(changes, source, function() { |
| applyChanges(changes, source); |
| }); |
| }; |
| this.setDataAtRowProp = function(row, prop, value, source) { |
| var input = setDataInputToArray(row, prop, value), |
| i, |
| ilen, |
| changes = []; |
| for (i = 0, ilen = input.length; i < ilen; i++) { |
| changes.push([input[i][0], input[i][1], datamap.get(input[i][0], input[i][1]), input[i][2]]); |
| } |
| if (!source && typeof row === 'object') { |
| source = prop; |
| } |
| validateChanges(changes, source, function() { |
| applyChanges(changes, source); |
| }); |
| }; |
| this.listen = function() { |
| Handsontable.activeGuid = instance.guid; |
| }; |
| this.unlisten = function() { |
| Handsontable.activeGuid = null; |
| }; |
| this.isListening = function() { |
| return Handsontable.activeGuid === instance.guid; |
| }; |
| this.destroyEditor = function(revertOriginal) { |
| selection.refreshBorders(revertOriginal); |
| }; |
| this.populateFromArray = function(row, col, input, endRow, endCol, source, method, direction, deltas) { |
| var c; |
| if (!(typeof input === 'object' && typeof input[0] === 'object')) { |
| throw new Error('populateFromArray parameter `input` must be an array of arrays'); |
| } |
| c = typeof endRow === 'number' ? new WalkontableCellCoords(endRow, endCol) : null; |
| return grid.populateFromArray(new WalkontableCellCoords(row, col), input, c, source, method, direction, deltas); |
| }; |
| this.spliceCol = function(col, index, amount) { |
| return datamap.spliceCol.apply(datamap, arguments); |
| }; |
| this.spliceRow = function(row, index, amount) { |
| return datamap.spliceRow.apply(datamap, arguments); |
| }; |
| this.getSelected = function() { |
| if (selection.isSelected()) { |
| return [priv.selRange.from.row, priv.selRange.from.col, priv.selRange.to.row, priv.selRange.to.col]; |
| } |
| }; |
| this.getSelectedRange = function() { |
| if (selection.isSelected()) { |
| return priv.selRange; |
| } |
| }; |
| this.render = function() { |
| if (instance.view) { |
| instance.renderCall = true; |
| instance.forceFullRender = true; |
| selection.refreshBorders(null, true); |
| } |
| }; |
| this.loadData = function(data) { |
| if (typeof data === 'object' && data !== null) { |
| if (!(data.push && data.splice)) { |
| data = [data]; |
| } |
| } else if (data === null) { |
| data = []; |
| var row; |
| for (var r = 0, |
| rlen = priv.settings.startRows; r < rlen; r++) { |
| row = []; |
| for (var c = 0, |
| clen = priv.settings.startCols; c < clen; c++) { |
| row.push(null); |
| } |
| data.push(row); |
| } |
| } else { |
| throw new Error('loadData only accepts array of objects or array of arrays (' + typeof data + ' given)'); |
| } |
| priv.isPopulated = false; |
| GridSettings.prototype.data = data; |
| if (Array.isArray(priv.settings.dataSchema) || Array.isArray(data[0])) { |
| instance.dataType = 'array'; |
| } else if (isFunction(priv.settings.dataSchema)) { |
| instance.dataType = 'function'; |
| } else { |
| instance.dataType = 'object'; |
| } |
| if (datamap) { |
| datamap.destroy(); |
| } |
| datamap = new DataMap(instance, priv, GridSettings); |
| dataSource.data = data; |
| dataSource.dataType = instance.dataType; |
| dataSource.colToProp = datamap.colToProp.bind(datamap); |
| dataSource.propToCol = datamap.propToCol.bind(datamap); |
| clearCellSettingCache(); |
| grid.adjustRowsAndCols(); |
| Handsontable.hooks.run(instance, 'afterLoadData', priv.firstRun); |
| if (priv.firstRun) { |
| priv.firstRun = [null, 'loadData']; |
| } else { |
| Handsontable.hooks.run(instance, 'afterChange', null, 'loadData'); |
| instance.render(); |
| } |
| priv.isPopulated = true; |
| function clearCellSettingCache() { |
| priv.cellSettings.length = 0; |
| } |
| }; |
| this.getData = function(r, c, r2, c2) { |
| if (isUndefined(r)) { |
| return datamap.getAll(); |
| } else { |
| return datamap.getRange(new WalkontableCellCoords(r, c), new WalkontableCellCoords(r2, c2), datamap.DESTINATION_RENDERER); |
| } |
| }; |
| this.getCopyableText = function(startRow, startCol, endRow, endCol) { |
| return datamap.getCopyableText(new WalkontableCellCoords(startRow, startCol), new WalkontableCellCoords(endRow, endCol)); |
| }; |
| this.getCopyableData = function(row, column) { |
| return datamap.getCopyable(row, datamap.colToProp(column)); |
| }; |
| this.getSchema = function() { |
| return datamap.getSchema(); |
| }; |
| this.updateSettings = function(settings, init) { |
| var columnsAsFunc = false; |
| var i; |
| var j; |
| var clen; |
| if (isDefined(settings.rows)) { |
| throw new Error('"rows" setting is no longer supported. do you mean startRows, minRows or maxRows?'); |
| } |
| if (isDefined(settings.cols)) { |
| throw new Error('"cols" setting is no longer supported. do you mean startCols, minCols or maxCols?'); |
| } |
| for (i in settings) { |
| if (i === 'data') { |
| continue; |
| } else { |
| if (Handsontable.hooks.getRegistered().indexOf(i) > -1) { |
| if (isFunction(settings[i]) || Array.isArray(settings[i])) { |
| instance.addHook(i, settings[i]); |
| } |
| } else { |
| if (!init && settings.hasOwnProperty(i)) { |
| GridSettings.prototype[i] = settings[i]; |
| } |
| } |
| } |
| } |
| if (settings.data === void 0 && priv.settings.data === void 0) { |
| instance.loadData(null); |
| } else if (settings.data !== void 0) { |
| instance.loadData(settings.data); |
| } else if (settings.columns !== void 0) { |
| datamap.createMap(); |
| } |
| clen = instance.countCols(); |
| if (settings.columns && isFunction(settings.columns)) { |
| clen = instance.countSourceCols(); |
| columnsAsFunc = true; |
| } |
| if (settings.cell !== void 0 || settings.cells !== void 0 || settings.columns !== void 0) { |
| priv.cellSettings.length = 0; |
| } |
| if (clen > 0) { |
| var proto; |
| var column; |
| for (i = 0, j = 0; i < clen; i++) { |
| if (columnsAsFunc && !settings.columns(i)) { |
| continue; |
| } |
| priv.columnSettings[j] = columnFactory(GridSettings, priv.columnsSettingConflicts); |
| proto = priv.columnSettings[j].prototype; |
| if (GridSettings.prototype.columns) { |
| if (columnsAsFunc) { |
| column = GridSettings.prototype.columns(i); |
| } else { |
| column = GridSettings.prototype.columns[j]; |
| } |
| if (column) { |
| extend(proto, column); |
| extend(proto, expandType(column)); |
| } |
| } |
| j++; |
| } |
| } |
| if (isDefined(settings.cell)) { |
| for (var key in settings.cell) { |
| if (settings.cell.hasOwnProperty(key)) { |
| var cell = settings.cell[key]; |
| instance.setCellMetaObject(cell.row, cell.col, cell); |
| } |
| } |
| } |
| Handsontable.hooks.run(instance, 'afterCellMetaReset'); |
| if (isDefined(settings.className)) { |
| if (GridSettings.prototype.className) { |
| removeClass(instance.rootElement, GridSettings.prototype.className); |
| } |
| if (settings.className) { |
| addClass(instance.rootElement, settings.className); |
| } |
| } |
| var currentHeight = instance.rootElement.style.height; |
| if (currentHeight !== '') { |
| currentHeight = parseInt(instance.rootElement.style.height, 10); |
| } |
| var height = settings.height; |
| if (isFunction(height)) { |
| height = height(); |
| } |
| if (init) { |
| var initialStyle = instance.rootElement.getAttribute('style'); |
| if (initialStyle) { |
| instance.rootElement.setAttribute('data-initialstyle', instance.rootElement.getAttribute('style')); |
| } |
| } |
| if (height === null) { |
| var initialStyle$__26 = instance.rootElement.getAttribute('data-initialstyle'); |
| if (initialStyle$__26 && (initialStyle$__26.indexOf('height') > -1 || initialStyle$__26.indexOf('overflow') > -1)) { |
| instance.rootElement.setAttribute('style', initialStyle$__26); |
| } else { |
| instance.rootElement.style.height = ''; |
| instance.rootElement.style.overflow = ''; |
| } |
| } else if (height !== void 0) { |
| instance.rootElement.style.height = height + 'px'; |
| instance.rootElement.style.overflow = 'hidden'; |
| } |
| if (typeof settings.width != 'undefined') { |
| var width = settings.width; |
| if (isFunction(width)) { |
| width = width(); |
| } |
| instance.rootElement.style.width = width + 'px'; |
| } |
| if (!init) { |
| datamap.clearLengthCache(); |
| Handsontable.hooks.run(instance, 'afterUpdateSettings'); |
| } |
| grid.adjustRowsAndCols(); |
| if (instance.view && !priv.firstRun) { |
| instance.forceFullRender = true; |
| selection.refreshBorders(null, true); |
| } |
| if (!init && instance.view && (currentHeight === '' || height === '' || height === void 0) && currentHeight !== height) { |
| instance.view.wt.wtOverlays.updateMainScrollableElements(); |
| } |
| }; |
| this.getValue = function() { |
| var sel = instance.getSelected(); |
| if (GridSettings.prototype.getValue) { |
| if (isFunction(GridSettings.prototype.getValue)) { |
| return GridSettings.prototype.getValue.call(instance); |
| } else if (sel) { |
| return instance.getData()[sel[0]][GridSettings.prototype.getValue]; |
| } |
| } else if (sel) { |
| return instance.getDataAtCell(sel[0], sel[1]); |
| } |
| }; |
| function expandType(obj) { |
| if (!obj.hasOwnProperty('type')) { |
| return; |
| } |
| var type, |
| expandedType = {}; |
| if (typeof obj.type === 'object') { |
| type = obj.type; |
| } else if (typeof obj.type === 'string') { |
| type = Handsontable.cellTypes[obj.type]; |
| if (type === void 0) { |
| throw new Error('You declared cell type "' + obj.type + '" as a string that is not mapped to a known object. Cell type must be an object or a string mapped to an object in Handsontable.cellTypes'); |
| } |
| } |
| for (var i in type) { |
| if (type.hasOwnProperty(i) && !obj.hasOwnProperty(i)) { |
| expandedType[i] = type[i]; |
| } |
| } |
| return expandedType; |
| } |
| this.getSettings = function() { |
| return priv.settings; |
| }; |
| this.clear = function() { |
| selection.selectAll(); |
| selection.empty(); |
| }; |
| this.alter = function(action, index, amount, source, keepEmptyRows) { |
| grid.alter(action, index, amount, source, keepEmptyRows); |
| }; |
| this.getCell = function(row, col, topmost) { |
| return instance.view.getCellAtCoords(new WalkontableCellCoords(row, col), topmost); |
| }; |
| this.getCoords = function(elem) { |
| return this.view.wt.wtTable.getCoords.call(this.view.wt.wtTable, elem); |
| }; |
| this.colToProp = function(col) { |
| return datamap.colToProp(col); |
| }; |
| this.propToCol = function(prop) { |
| return datamap.propToCol(prop); |
| }; |
| this.getDataAtCell = function(row, col) { |
| return datamap.get(row, datamap.colToProp(col)); |
| }; |
| this.getDataAtRowProp = function(row, prop) { |
| return datamap.get(row, prop); |
| }; |
| this.getDataAtCol = function(col) { |
| var out = []; |
| return out.concat.apply(out, datamap.getRange(new WalkontableCellCoords(0, col), new WalkontableCellCoords(priv.settings.data.length - 1, col), datamap.DESTINATION_RENDERER)); |
| }; |
| this.getDataAtProp = function(prop) { |
| var out = [], |
| range; |
| range = datamap.getRange(new WalkontableCellCoords(0, datamap.propToCol(prop)), new WalkontableCellCoords(priv.settings.data.length - 1, datamap.propToCol(prop)), datamap.DESTINATION_RENDERER); |
| return out.concat.apply(out, range); |
| }; |
| this.getSourceData = function(r, c, r2, c2) { |
| var data; |
| if (r === void 0) { |
| data = dataSource.getData(); |
| } else { |
| data = dataSource.getByRange(new WalkontableCellCoords(r, c), new WalkontableCellCoords(r2, c2)); |
| } |
| return data; |
| }; |
| this.getSourceDataAtCol = function(column) { |
| return dataSource.getAtColumn(column); |
| }; |
| this.getSourceDataAtRow = function(row) { |
| return dataSource.getAtRow(row); |
| }; |
| this.getSourceDataAtCell = function(row, column) { |
| return dataSource.getAtCell(row, column); |
| }; |
| this.getDataAtRow = function(row) { |
| var data = datamap.getRange(new WalkontableCellCoords(row, 0), new WalkontableCellCoords(row, this.countCols() - 1), datamap.DESTINATION_RENDERER); |
| return data[0]; |
| }; |
| this.getDataType = function(rowFrom, columnFrom, rowTo, columnTo) { |
| var $__22 = this; |
| var previousType = null; |
| var currentType = null; |
| if (rowFrom === void 0) { |
| rowFrom = 0; |
| rowTo = this.countRows(); |
| columnFrom = 0; |
| columnTo = this.countCols(); |
| } |
| if (rowTo === void 0) { |
| rowTo = rowFrom; |
| } |
| if (columnTo === void 0) { |
| columnTo = columnFrom; |
| } |
| var type = 'mixed'; |
| rangeEach(Math.min(rowFrom, rowTo), Math.max(rowFrom, rowTo), (function(row) { |
| var isTypeEqual = true; |
| rangeEach(Math.min(columnFrom, columnTo), Math.max(columnFrom, columnTo), (function(column) { |
| var cellType = $__22.getCellMeta(row, column); |
| currentType = cellType.type; |
| if (previousType) { |
| isTypeEqual = previousType === currentType; |
| } else { |
| previousType = currentType; |
| } |
| return isTypeEqual; |
| })); |
| type = isTypeEqual ? currentType : 'mixed'; |
| return isTypeEqual; |
| })); |
| return type; |
| }; |
| this.removeCellMeta = function(row, col, key) { |
| var cellMeta = instance.getCellMeta(row, col); |
| if (cellMeta[key] != undefined) { |
| delete priv.cellSettings[row][col][key]; |
| } |
| }; |
| this.setCellMetaObject = function(row, col, prop) { |
| if (typeof prop === 'object') { |
| for (var key in prop) { |
| if (prop.hasOwnProperty(key)) { |
| var value = prop[key]; |
| this.setCellMeta(row, col, key, value); |
| } |
| } |
| } |
| }; |
| this.setCellMeta = function(row, col, key, val) { |
| if (!priv.cellSettings[row]) { |
| priv.cellSettings[row] = []; |
| } |
| if (!priv.cellSettings[row][col]) { |
| priv.cellSettings[row][col] = new priv.columnSettings[col](); |
| } |
| priv.cellSettings[row][col][key] = val; |
| Handsontable.hooks.run(instance, 'afterSetCellMeta', row, col, key, val); |
| }; |
| this.getCellsMeta = function() { |
| return arrayFlatten(priv.cellSettings); |
| }; |
| this.getCellMeta = function(row, col) { |
| var prop = datamap.colToProp(col), |
| cellProperties; |
| var visualRow = row; |
| var visualCol = col; |
| row = translateRowIndex(row); |
| col = translateColIndex(col); |
| if (!priv.columnSettings[col]) { |
| priv.columnSettings[col] = columnFactory(GridSettings, priv.columnsSettingConflicts); |
| } |
| if (!priv.cellSettings[row]) { |
| priv.cellSettings[row] = []; |
| } |
| if (!priv.cellSettings[row][col]) { |
| priv.cellSettings[row][col] = new priv.columnSettings[col](); |
| } |
| cellProperties = priv.cellSettings[row][col]; |
| cellProperties.row = row; |
| cellProperties.col = col; |
| cellProperties.visualRow = visualRow; |
| cellProperties.visualCol = visualCol; |
| cellProperties.prop = prop; |
| cellProperties.instance = instance; |
| Handsontable.hooks.run(instance, 'beforeGetCellMeta', row, col, cellProperties); |
| extend(cellProperties, expandType(cellProperties)); |
| if (cellProperties.cells) { |
| var settings = cellProperties.cells.call(cellProperties, row, col, prop); |
| if (settings) { |
| extend(cellProperties, settings); |
| extend(cellProperties, expandType(settings)); |
| } |
| } |
| Handsontable.hooks.run(instance, 'afterGetCellMeta', row, col, cellProperties); |
| return cellProperties; |
| }; |
| this.isColumnModificationAllowed = function() { |
| return !(instance.dataType === 'object' || instance.getSettings().columns); |
| }; |
| function translateRowIndex(row) { |
| return Handsontable.hooks.run(instance, 'modifyRow', row); |
| } |
| function translateColIndex(col) { |
| return Handsontable.hooks.run(instance, 'modifyCol', col); |
| } |
| var rendererLookup = cellMethodLookupFactory('renderer'); |
| this.getCellRenderer = function(row, col) { |
| var renderer = rendererLookup.call(this, row, col); |
| return getRenderer(renderer); |
| }; |
| this.getCellEditor = cellMethodLookupFactory('editor'); |
| this.getCellValidator = cellMethodLookupFactory('validator'); |
| this.validateCells = function(callback) { |
| var waitingForValidator = new ValidatorsQueue(); |
| if (callback) { |
| waitingForValidator.onQueueEmpty = callback; |
| } |
| var i = instance.countRows() - 1; |
| while (i >= 0) { |
| var j = instance.countCols() - 1; |
| while (j >= 0) { |
| waitingForValidator.addValidatorToQueue(); |
| instance.validateCell(instance.getDataAtCell(i, j), instance.getCellMeta(i, j), function(result) { |
| if (typeof result !== 'boolean') { |
| throw new Error('Validation error: result is not boolean'); |
| } |
| if (result === false) { |
| waitingForValidator.valid = false; |
| } |
| waitingForValidator.removeValidatorFormQueue(); |
| }, 'validateCells'); |
| j--; |
| } |
| i--; |
| } |
| waitingForValidator.checkIfQueueIsEmpty(); |
| }; |
| this.getRowHeader = function(row) { |
| var rowHeader = priv.settings.rowHeaders; |
| if (row !== void 0) { |
| row = Handsontable.hooks.run(instance, 'modifyRowHeader', row); |
| } |
| if (row === void 0) { |
| rowHeader = []; |
| rangeEach(instance.countRows() - 1, (function(i) { |
| rowHeader.push(instance.getRowHeader(i)); |
| })); |
| } else if (Array.isArray(rowHeader) && rowHeader[row] !== void 0) { |
| rowHeader = rowHeader[row]; |
| } else if (isFunction(rowHeader)) { |
| rowHeader = rowHeader(row); |
| } else if (rowHeader && typeof rowHeader !== 'string' && typeof rowHeader !== 'number') { |
| rowHeader = row + 1; |
| } |
| return rowHeader; |
| }; |
| this.hasRowHeaders = function() { |
| return !!priv.settings.rowHeaders; |
| }; |
| this.hasColHeaders = function() { |
| if (priv.settings.colHeaders !== void 0 && priv.settings.colHeaders !== null) { |
| return !!priv.settings.colHeaders; |
| } |
| for (var i = 0, |
| ilen = instance.countCols(); i < ilen; i++) { |
| if (instance.getColHeader(i)) { |
| return true; |
| } |
| } |
| return false; |
| }; |
| this.getColHeader = function(col) { |
| var columnsAsFunc = priv.settings.columns && isFunction(priv.settings.columns); |
| var result = priv.settings.colHeaders; |
| col = Handsontable.hooks.run(instance, 'modifyColHeader', col); |
| if (col === void 0) { |
| var out = []; |
| var ilen = columnsAsFunc ? instance.countSourceCols() : instance.countCols(); |
| for (var i = 0; i < ilen; i++) { |
| out.push(instance.getColHeader(i)); |
| } |
| result = out; |
| } else { |
| var translateVisualIndexToColumns = function(col) { |
| var arr = []; |
| var columnsLen = instance.countSourceCols(); |
| var index = 0; |
| for (; index < columnsLen; index++) { |
| if (isFunction(instance.getSettings().columns) && instance.getSettings().columns(index)) { |
| arr.push(index); |
| } |
| } |
| return arr[col]; |
| }; |
| var baseCol = col; |
| col = Handsontable.hooks.run(instance, 'modifyCol', col); |
| var prop = translateVisualIndexToColumns(col); |
| if (priv.settings.columns && isFunction(priv.settings.columns) && priv.settings.columns(prop) && priv.settings.columns(prop).title) { |
| result = priv.settings.columns(prop).title; |
| } else if (priv.settings.columns && priv.settings.columns[col] && priv.settings.columns[col].title) { |
| result = priv.settings.columns[col].title; |
| } else if (Array.isArray(priv.settings.colHeaders) && priv.settings.colHeaders[col] !== void 0) { |
| result = priv.settings.colHeaders[col]; |
| } else if (isFunction(priv.settings.colHeaders)) { |
| result = priv.settings.colHeaders(col); |
| } else if (priv.settings.colHeaders && typeof priv.settings.colHeaders !== 'string' && typeof priv.settings.colHeaders !== 'number') { |
| result = spreadsheetColumnLabel(baseCol); |
| } |
| } |
| return result; |
| }; |
| this._getColWidthFromSettings = function(col) { |
| var cellProperties = instance.getCellMeta(0, col); |
| var width = cellProperties.width; |
| if (width === void 0 || width === priv.settings.width) { |
| width = cellProperties.colWidths; |
| } |
| if (width !== void 0 && width !== null) { |
| switch (typeof width) { |
| case 'object': |
| width = width[col]; |
| break; |
| case 'function': |
| width = width(col); |
| break; |
| } |
| if (typeof width === 'string') { |
| width = parseInt(width, 10); |
| } |
| } |
| return width; |
| }; |
| this.getColWidth = function(col) { |
| var width = instance._getColWidthFromSettings(col); |
| width = Handsontable.hooks.run(instance, 'modifyColWidth', width, col); |
| if (width === void 0) { |
| width = WalkontableViewportColumnsCalculator.DEFAULT_WIDTH; |
| } |
| return width; |
| }; |
| this._getRowHeightFromSettings = function(row) { |
| var height = priv.settings.rowHeights; |
| if (height !== void 0 && height !== null) { |
| switch (typeof height) { |
| case 'object': |
| height = height[row]; |
| break; |
| case 'function': |
| height = height(row); |
| break; |
| } |
| if (typeof height === 'string') { |
| height = parseInt(height, 10); |
| } |
| } |
| return height; |
| }; |
| this.getRowHeight = function(row) { |
| var height = instance._getRowHeightFromSettings(row); |
| height = Handsontable.hooks.run(instance, 'modifyRowHeight', height, row); |
| return height; |
| }; |
| this.countSourceRows = function() { |
| return instance.getSourceData() ? instance.getSourceData().length : 0; |
| }; |
| this.countSourceCols = function() { |
| var len = 0; |
| var obj = instance.getSourceData() && instance.getSourceData()[0] ? instance.getSourceData()[0] : []; |
| if (isObject(obj)) { |
| len = deepObjectSize(obj); |
| } else { |
| len = obj.length || 0; |
| } |
| return len; |
| }; |
| this.countRows = function() { |
| return datamap.getLength(); |
| }; |
| this.countCols = function() { |
| var dataHasLength = false; |
| var dataLen = 0; |
| if (instance.dataType === 'array') { |
| dataHasLength = priv.settings.data && priv.settings.data[0] && priv.settings.data[0].length; |
| } |
| if (dataHasLength) { |
| dataLen = priv.settings.data[0].length; |
| } |
| if (priv.settings.columns) { |
| var columnsIsFunction = isFunction(priv.settings.columns); |
| if (columnsIsFunction) { |
| if (instance.dataType === 'array') { |
| var columnLen = 0; |
| for (var i = 0; i < dataLen; i++) { |
| if (priv.settings.columns(i)) { |
| columnLen++; |
| } |
| } |
| dataLen = columnLen; |
| } else if (instance.dataType === 'object' || instance.dataType === 'function') { |
| dataLen = datamap.colToPropCache.length; |
| } |
| } else { |
| dataLen = priv.settings.columns.length; |
| } |
| } else { |
| if (instance.dataType === 'object' || instance.dataType === 'function') { |
| dataLen = datamap.colToPropCache.length; |
| } |
| } |
| return dataLen; |
| }; |
| this.rowOffset = function() { |
| return instance.view.wt.wtTable.getFirstRenderedRow(); |
| }; |
| this.colOffset = function() { |
| return instance.view.wt.wtTable.getFirstRenderedColumn(); |
| }; |
| this.countRenderedRows = function() { |
| return instance.view.wt.drawn ? instance.view.wt.wtTable.getRenderedRowsCount() : -1; |
| }; |
| this.countVisibleRows = function() { |
| return instance.view.wt.drawn ? instance.view.wt.wtTable.getVisibleRowsCount() : -1; |
| }; |
| this.countRenderedCols = function() { |
| return instance.view.wt.drawn ? instance.view.wt.wtTable.getRenderedColumnsCount() : -1; |
| }; |
| this.countVisibleCols = function() { |
| return instance.view.wt.drawn ? instance.view.wt.wtTable.getVisibleColumnsCount() : -1; |
| }; |
| this.countEmptyRows = function(ending) { |
| var i = instance.countRows() - 1, |
| empty = 0, |
| row; |
| while (i >= 0) { |
| row = Handsontable.hooks.run(this, 'modifyRow', i); |
| if (instance.isEmptyRow(row)) { |
| empty++; |
| } else if (ending) { |
| break; |
| } |
| i--; |
| } |
| return empty; |
| }; |
| this.countEmptyCols = function(ending) { |
| if (instance.countRows() < 1) { |
| return 0; |
| } |
| var i = instance.countCols() - 1, |
| empty = 0; |
| while (i >= 0) { |
| if (instance.isEmptyCol(i)) { |
| empty++; |
| } else if (ending) { |
| break; |
| } |
| i--; |
| } |
| return empty; |
| }; |
| this.isEmptyRow = function(row) { |
| return priv.settings.isEmptyRow.call(instance, row); |
| }; |
| this.isEmptyCol = function(col) { |
| return priv.settings.isEmptyCol.call(instance, col); |
| }; |
| this.selectCell = function(row, col, endRow, endCol, scrollToCell, changeListener) { |
| var coords; |
| changeListener = isUndefined(changeListener) || changeListener === true; |
| if (typeof row !== 'number' || row < 0 || row >= instance.countRows()) { |
| return false; |
| } |
| if (typeof col !== 'number' || col < 0 || col >= instance.countCols()) { |
| return false; |
| } |
| if (isDefined(endRow)) { |
| if (typeof endRow !== 'number' || endRow < 0 || endRow >= instance.countRows()) { |
| return false; |
| } |
| if (typeof endCol !== 'number' || endCol < 0 || endCol >= instance.countCols()) { |
| return false; |
| } |
| } |
| coords = new WalkontableCellCoords(row, col); |
| priv.selRange = new WalkontableCellRange(coords, coords, coords); |
| if (changeListener) { |
| instance.listen(); |
| } |
| if (isUndefined(endRow)) { |
| selection.setRangeEnd(priv.selRange.from, scrollToCell); |
| } else { |
| selection.setRangeEnd(new WalkontableCellCoords(endRow, endCol), scrollToCell); |
| } |
| instance.selection.finish(); |
| return true; |
| }; |
| this.selectCellByProp = function(row, prop, endRow, endProp, scrollToCell) { |
| arguments[1] = datamap.propToCol(arguments[1]); |
| if (isDefined(arguments[3])) { |
| arguments[3] = datamap.propToCol(arguments[3]); |
| } |
| return instance.selectCell.apply(instance, arguments); |
| }; |
| this.deselectCell = function() { |
| selection.deselect(); |
| }; |
| this.scrollViewportTo = function(row, column) { |
| if (row !== void 0 && (row < 0 || row >= instance.countRows())) { |
| return false; |
| } |
| if (column !== void 0 && (column < 0 || column >= instance.countCols())) { |
| return false; |
| } |
| var result = false; |
| if (row !== void 0 && column !== void 0) { |
| instance.view.wt.scrollVertical(row); |
| instance.view.wt.scrollHorizontal(column); |
| result = true; |
| } |
| if (typeof row === 'number' && typeof column !== 'number') { |
| instance.view.wt.scrollVertical(row); |
| result = true; |
| } |
| if (typeof column === 'number' && typeof row !== 'number') { |
| instance.view.wt.scrollHorizontal(column); |
| result = true; |
| } |
| return result; |
| }; |
| this.destroy = function() { |
| instance._clearTimeouts(); |
| if (instance.view) { |
| instance.view.destroy(); |
| } |
| if (dataSource) { |
| dataSource.destroy(); |
| } |
| dataSource = null; |
| empty(instance.rootElement); |
| eventManager.destroy(); |
| Handsontable.hooks.run(instance, 'afterDestroy'); |
| Handsontable.hooks.destroy(instance); |
| for (var i in instance) { |
| if (instance.hasOwnProperty(i)) { |
| if (isFunction(instance[i])) { |
| instance[i] = postMortem; |
| } else if (i !== 'guid') { |
| instance[i] = null; |
| } |
| } |
| } |
| if (datamap) { |
| datamap.destroy(); |
| } |
| datamap = null; |
| priv = null; |
| grid = null; |
| selection = null; |
| editorManager = null; |
| instance = null; |
| GridSettings = null; |
| }; |
| function postMortem() { |
| throw new Error('This method cannot be called because this Handsontable instance has been destroyed'); |
| } |
| this.getActiveEditor = function() { |
| return editorManager.getActiveEditor(); |
| }; |
| this.getPlugin = function(pluginName) { |
| return getPlugin(this, pluginName); |
| }; |
| this.getInstance = function() { |
| return instance; |
| }; |
| this.addHook = function(key, callback) { |
| Handsontable.hooks.add(key, callback, instance); |
| }; |
| this.hasHook = function(key) { |
| return Handsontable.hooks.has(key, instance); |
| }; |
| this.addHookOnce = function(key, callback) { |
| Handsontable.hooks.once(key, callback, instance); |
| }; |
| this.removeHook = function(key, callback) { |
| Handsontable.hooks.remove(key, callback, instance); |
| }; |
| this.runHooks = function(key, p1, p2, p3, p4, p5, p6) { |
| return Handsontable.hooks.run(instance, key, p1, p2, p3, p4, p5, p6); |
| }; |
| this.timeouts = []; |
| this._registerTimeout = function(handle) { |
| this.timeouts.push(handle); |
| }; |
| this._clearTimeouts = function() { |
| for (var i = 0, |
| ilen = this.timeouts.length; i < ilen; i++) { |
| clearTimeout(this.timeouts[i]); |
| } |
| }; |
| this.version = Handsontable.version; |
| Handsontable.hooks.run(instance, 'construct'); |
| }; |
| var DefaultSettings = function() {}; |
| DefaultSettings.prototype = { |
| data: void 0, |
| dataSchema: void 0, |
| width: void 0, |
| height: void 0, |
| startRows: 5, |
| startCols: 5, |
| rowHeaders: void 0, |
| colHeaders: null, |
| colWidths: void 0, |
| rowHeights: void 0, |
| columns: void 0, |
| cells: void 0, |
| cell: [], |
| comments: false, |
| customBorders: false, |
| minRows: 0, |
| minCols: 0, |
| maxRows: Infinity, |
| maxCols: Infinity, |
| minSpareRows: 0, |
| minSpareCols: 0, |
| allowInsertRow: true, |
| allowInsertColumn: true, |
| allowRemoveRow: true, |
| allowRemoveColumn: true, |
| multiSelect: true, |
| fillHandle: true, |
| fixedRowsTop: 0, |
| fixedRowsBottom: 0, |
| fixedColumnsLeft: 0, |
| outsideClickDeselects: true, |
| enterBeginsEditing: true, |
| enterMoves: { |
| row: 1, |
| col: 0 |
| }, |
| tabMoves: { |
| row: 0, |
| col: 1 |
| }, |
| autoWrapRow: false, |
| autoWrapCol: false, |
| copyRowsLimit: 1000, |
| copyColsLimit: 1000, |
| pasteMode: 'overwrite', |
| persistentState: void 0, |
| currentRowClassName: void 0, |
| currentColClassName: void 0, |
| className: void 0, |
| tableClassName: void 0, |
| stretchH: 'none', |
| isEmptyRow: function(row) { |
| var col, |
| colLen, |
| value, |
| meta; |
| for (col = 0, colLen = this.countCols(); col < colLen; col++) { |
| value = this.getDataAtCell(row, col); |
| if (value !== '' && value !== null && isDefined(value)) { |
| if (typeof value === 'object') { |
| meta = this.getCellMeta(row, col); |
| return isObjectEquals(this.getSchema()[meta.prop], value); |
| } |
| return false; |
| } |
| } |
| return true; |
| }, |
| isEmptyCol: function(col) { |
| var row, |
| rowLen, |
| value; |
| for (row = 0, rowLen = this.countRows(); row < rowLen; row++) { |
| value = this.getDataAtCell(row, col); |
| if (value !== '' && value !== null && isDefined(value)) { |
| return false; |
| } |
| } |
| return true; |
| }, |
| observeDOMVisibility: true, |
| allowInvalid: true, |
| allowEmpty: true, |
| invalidCellClassName: 'htInvalid', |
| placeholder: false, |
| placeholderCellClassName: 'htPlaceholder', |
| readOnlyCellClassName: 'htDimmed', |
| renderer: void 0, |
| commentedCellClassName: 'htCommentCell', |
| fragmentSelection: false, |
| readOnly: false, |
| skipColumnOnPaste: false, |
| search: false, |
| type: 'text', |
| copyable: true, |
| editor: void 0, |
| autoComplete: void 0, |
| visibleRows: 10, |
| trimDropdown: true, |
| debug: false, |
| wordWrap: true, |
| noWordWrapClassName: 'htNoWrap', |
| contextMenu: void 0, |
| contextMenuCopyPaste: void 0, |
| copyPaste: void 0, |
| undo: void 0, |
| columnSorting: void 0, |
| manualColumnMove: void 0, |
| manualColumnResize: void 0, |
| manualRowMove: void 0, |
| manualRowResize: void 0, |
| mergeCells: false, |
| viewportRowRenderingOffset: 'auto', |
| viewportColumnRenderingOffset: 'auto', |
| validator: void 0, |
| disableVisualSelection: false, |
| sortIndicator: void 0, |
| manualColumnFreeze: void 0, |
| trimWhitespace: true, |
| settings: void 0, |
| source: void 0, |
| title: void 0, |
| checkedTemplate: void 0, |
| uncheckedTemplate: void 0, |
| label: void 0, |
| format: void 0, |
| language: void 0, |
| selectOptions: void 0, |
| autoColumnSize: void 0, |
| autoRowSize: void 0, |
| dateFormat: void 0, |
| correctFormat: false, |
| defaultDate: void 0, |
| strict: void 0, |
| renderAllRows: void 0, |
| preventOverflow: false, |
| bindRowsWithHeaders: void 0, |
| collapsibleColumns: void 0, |
| columnSummary: void 0, |
| dropdownMenu: void 0, |
| filters: void 0, |
| ganttChart: void 0, |
| headerTooltips: void 0, |
| hiddenColumns: void 0, |
| hiddenRows: void 0, |
| nestedHeaders: void 0, |
| trimRows: void 0, |
| rowHeaderWidth: void 0, |
| columnHeaderHeight: void 0, |
| observeChanges: void 0, |
| sortFunction: void 0, |
| sortByRelevance: true, |
| filter: true, |
| filteringCaseSensitive: false |
| }; |
| Handsontable.DefaultSettings = DefaultSettings; |
| |
| //# |
| },{"3rdparty/walkontable/src/calculator/viewportColumns":4,"3rdparty/walkontable/src/cell/coords":6,"3rdparty/walkontable/src/cell/range":7,"browser":24,"dataMap":27,"dataSource":28,"editorManager":29,"eventManager":42,"helpers/array":43,"helpers/browser":44,"helpers/data":45,"helpers/dom/element":47,"helpers/function":50,"helpers/mixed":51,"helpers/number":52,"helpers/object":53,"helpers/setting":54,"helpers/string":55,"numbro":"numbro","plugins":60,"renderers":105,"tableView":114}],27:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| DataMap: {get: function() { |
| return DataMap; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__browser__, |
| $__SheetClip__, |
| $__helpers_47_data__, |
| $__helpers_47_setting__, |
| $__helpers_47_object__, |
| $__helpers_47_array__, |
| $__utils_47_interval__, |
| $__helpers_47_number__, |
| $__multiMap__; |
| var Handsontable = ($__browser__ = _dereq_("browser"), $__browser__ && $__browser__.__esModule && $__browser__ || {default: $__browser__}).default; |
| var SheetClip = ($__SheetClip__ = _dereq_("SheetClip"), $__SheetClip__ && $__SheetClip__.__esModule && $__SheetClip__ || {default: $__SheetClip__}).default; |
| var cellMethodLookupFactory = ($__helpers_47_data__ = _dereq_("helpers/data"), $__helpers_47_data__ && $__helpers_47_data__.__esModule && $__helpers_47_data__ || {default: $__helpers_47_data__}).cellMethodLookupFactory; |
| var columnFactory = ($__helpers_47_setting__ = _dereq_("helpers/setting"), $__helpers_47_setting__ && $__helpers_47_setting__.__esModule && $__helpers_47_setting__ || {default: $__helpers_47_setting__}).columnFactory; |
| var $__4 = ($__helpers_47_object__ = _dereq_("helpers/object"), $__helpers_47_object__ && $__helpers_47_object__.__esModule && $__helpers_47_object__ || {default: $__helpers_47_object__}), |
| duckSchema = $__4.duckSchema, |
| deepExtend = $__4.deepExtend, |
| deepClone = $__4.deepClone, |
| isObject = $__4.isObject, |
| deepObjectSize = $__4.deepObjectSize; |
| var $__5 = ($__helpers_47_array__ = _dereq_("helpers/array"), $__helpers_47_array__ && $__helpers_47_array__.__esModule && $__helpers_47_array__ || {default: $__helpers_47_array__}), |
| extendArray = $__5.extendArray, |
| to2dArray = $__5.to2dArray; |
| var Interval = ($__utils_47_interval__ = _dereq_("utils/interval"), $__utils_47_interval__ && $__utils_47_interval__.__esModule && $__utils_47_interval__ || {default: $__utils_47_interval__}).Interval; |
| var rangeEach = ($__helpers_47_number__ = _dereq_("helpers/number"), $__helpers_47_number__ && $__helpers_47_number__.__esModule && $__helpers_47_number__ || {default: $__helpers_47_number__}).rangeEach; |
| var MultiMap = ($__multiMap__ = _dereq_("multiMap"), $__multiMap__ && $__multiMap__.__esModule && $__multiMap__ || {default: $__multiMap__}).MultiMap; |
| function DataMap(instance, priv, GridSettings) { |
| var $__9 = this; |
| this.instance = instance; |
| this.priv = priv; |
| this.GridSettings = GridSettings; |
| this.dataSource = this.instance.getSettings().data; |
| this.cachedLength = null; |
| this.latestSourceRowsCount = 0; |
| if (this.dataSource[0]) { |
| this.duckSchema = this.recursiveDuckSchema(this.dataSource[0]); |
| } else { |
| this.duckSchema = {}; |
| } |
| this.createMap(); |
| this.interval = Interval.create((function() { |
| return $__9.clearLengthCache(); |
| }), '15fps'); |
| } |
| DataMap.prototype.DESTINATION_RENDERER = 1; |
| DataMap.prototype.DESTINATION_CLIPBOARD_GENERATOR = 2; |
| DataMap.prototype.recursiveDuckSchema = function(object) { |
| return duckSchema(object); |
| }; |
| DataMap.prototype.recursiveDuckColumns = function(schema, lastCol, parent) { |
| var prop, |
| i; |
| if (typeof lastCol === 'undefined') { |
| lastCol = 0; |
| parent = ''; |
| } |
| if (typeof schema === 'object' && !Array.isArray(schema)) { |
| for (i in schema) { |
| if (schema.hasOwnProperty(i)) { |
| if (schema[i] === null) { |
| prop = parent + i; |
| this.colToPropCache.push(prop); |
| this.propToColCache.set(prop, lastCol); |
| lastCol++; |
| } else { |
| lastCol = this.recursiveDuckColumns(schema[i], lastCol, i + '.'); |
| } |
| } |
| } |
| } |
| return lastCol; |
| }; |
| DataMap.prototype.createMap = function() { |
| var i; |
| var schema = this.getSchema(); |
| if (typeof schema === 'undefined') { |
| throw new Error('trying to create `columns` definition but you didnt\' provide `schema` nor `data`'); |
| } |
| this.colToPropCache = []; |
| this.propToColCache = new MultiMap(); |
| var columns = this.instance.getSettings().columns; |
| if (columns) { |
| var columnsLen = columns.length; |
| var filteredIndex = 0; |
| var columnsAsFunc = false; |
| var schemaLen = deepObjectSize(schema); |
| if (typeof columns === 'function') { |
| columnsLen = schemaLen > 0 ? schemaLen : this.instance.countSourceCols(); |
| columnsAsFunc = true; |
| } |
| for (i = 0; i < columnsLen; i++) { |
| var column = columnsAsFunc ? columns(i) : columns[i]; |
| if (isObject(column)) { |
| if (typeof column.data !== 'undefined') { |
| var index = columnsAsFunc ? filteredIndex : i; |
| this.colToPropCache[index] = column.data; |
| this.propToColCache.set(column.data, index); |
| } |
| filteredIndex++; |
| } |
| } |
| } else { |
| this.recursiveDuckColumns(schema); |
| } |
| }; |
| DataMap.prototype.colToProp = function(col) { |
| col = Handsontable.hooks.run(this.instance, 'modifyCol', col); |
| if (this.colToPropCache && typeof this.colToPropCache[col] !== 'undefined') { |
| return this.colToPropCache[col]; |
| } |
| return col; |
| }; |
| DataMap.prototype.propToCol = function(prop) { |
| var col; |
| if (typeof this.propToColCache.get(prop) === 'undefined') { |
| col = prop; |
| } else { |
| col = this.propToColCache.get(prop); |
| } |
| col = Handsontable.hooks.run(this.instance, 'unmodifyCol', col); |
| return col; |
| }; |
| DataMap.prototype.getSchema = function() { |
| var schema = this.instance.getSettings().dataSchema; |
| if (schema) { |
| if (typeof schema === 'function') { |
| return schema(); |
| } |
| return schema; |
| } |
| return this.duckSchema; |
| }; |
| DataMap.prototype.createRow = function(index, amount, createdAutomatically) { |
| var row, |
| colCount = this.instance.countCols(), |
| numberOfCreatedRows = 0, |
| currentIndex; |
| if (!amount) { |
| amount = 1; |
| } |
| if (typeof index !== 'number' || index >= this.instance.countSourceRows()) { |
| index = this.instance.countSourceRows(); |
| } |
| currentIndex = index; |
| var maxRows = this.instance.getSettings().maxRows; |
| while (numberOfCreatedRows < amount && this.instance.countSourceRows() < maxRows) { |
| if (this.instance.dataType === 'array') { |
| if (this.instance.getSettings().dataSchema) { |
| row = deepClone(this.getSchema()); |
| } else { |
| row = []; |
| rangeEach(colCount - 1, (function() { |
| return row.push(null); |
| })); |
| } |
| } else if (this.instance.dataType === 'function') { |
| row = this.instance.getSettings().dataSchema(index); |
| } else { |
| row = {}; |
| deepExtend(row, this.getSchema()); |
| } |
| if (index === this.instance.countSourceRows()) { |
| this.dataSource.push(row); |
| } else { |
| this.dataSource.splice(index, 0, row); |
| } |
| numberOfCreatedRows++; |
| currentIndex++; |
| } |
| Handsontable.hooks.run(this.instance, 'afterCreateRow', index, numberOfCreatedRows, createdAutomatically); |
| this.instance.forceFullRender = true; |
| return numberOfCreatedRows; |
| }; |
| DataMap.prototype.createCol = function(index, amount, createdAutomatically) { |
| if (!this.instance.isColumnModificationAllowed()) { |
| throw new Error('Cannot create new column. When data source in an object, ' + 'you can only have as much columns as defined in first data row, data schema or in the \'columns\' setting.' + 'If you want to be able to add new columns, you have to use array datasource.'); |
| } |
| var rlen = this.instance.countSourceRows(), |
| data = this.dataSource, |
| constructor, |
| numberOfCreatedCols = 0, |
| currentIndex; |
| if (!amount) { |
| amount = 1; |
| } |
| if (typeof index !== 'number' || index >= this.instance.countCols()) { |
| index = this.instance.countCols(); |
| } |
| currentIndex = index; |
| var maxCols = this.instance.getSettings().maxCols; |
| while (numberOfCreatedCols < amount && this.instance.countCols() < maxCols) { |
| constructor = columnFactory(this.GridSettings, this.priv.columnsSettingConflicts); |
| if (typeof index !== 'number' || index >= this.instance.countCols()) { |
| if (rlen > 0) { |
| for (var r = 0; r < rlen; r++) { |
| if (typeof data[r] === 'undefined') { |
| data[r] = []; |
| } |
| data[r].push(null); |
| } |
| } else { |
| data.push([null]); |
| } |
| this.priv.columnSettings.push(constructor); |
| } else { |
| for (var r = 0; r < rlen; r++) { |
| data[r].splice(currentIndex, 0, null); |
| } |
| this.priv.columnSettings.splice(currentIndex, 0, constructor); |
| } |
| numberOfCreatedCols++; |
| currentIndex++; |
| } |
| Handsontable.hooks.run(this.instance, 'afterCreateCol', index, numberOfCreatedCols, createdAutomatically); |
| this.instance.forceFullRender = true; |
| return numberOfCreatedCols; |
| }; |
| DataMap.prototype.removeRow = function(index, amount) { |
| if (!amount) { |
| amount = 1; |
| } |
| if (typeof index !== 'number') { |
| index = -amount; |
| } |
| index = (this.instance.countSourceRows() + index) % this.instance.countSourceRows(); |
| var logicRows = this.physicalRowsToLogical(index, amount); |
| var descendingLogicRows = logicRows.slice(0).sort(function(a, b) { |
| return b - a; |
| }); |
| var actionWasNotCancelled = Handsontable.hooks.run(this.instance, 'beforeRemoveRow', index, amount, logicRows); |
| if (actionWasNotCancelled === false) { |
| return; |
| } |
| var data = this.dataSource; |
| var newData; |
| newData = data.filter(function(row, index) { |
| return logicRows.indexOf(index) == -1; |
| }); |
| data.length = 0; |
| Array.prototype.push.apply(data, newData); |
| Handsontable.hooks.run(this.instance, 'afterRemoveRow', index, amount, logicRows); |
| this.instance.forceFullRender = true; |
| }; |
| DataMap.prototype.removeCol = function(index, amount) { |
| if (this.instance.dataType === 'object' || this.instance.getSettings().columns) { |
| throw new Error('cannot remove column with object data source or columns option specified'); |
| } |
| if (!amount) { |
| amount = 1; |
| } |
| if (typeof index !== 'number') { |
| index = -amount; |
| } |
| index = (this.instance.countCols() + index) % this.instance.countCols(); |
| var logicColumns = this.physicalColumnsToLogical(index, amount); |
| var descendingLogicColumns = logicColumns.slice(0).sort(function(a, b) { |
| return b - a; |
| }); |
| var actionWasNotCancelled = Handsontable.hooks.run(this.instance, 'beforeRemoveCol', index, amount, logicColumns); |
| if (actionWasNotCancelled === false) { |
| return; |
| } |
| var isTableUniform = true; |
| var removedColumnsCount = descendingLogicColumns.length; |
| var data = this.dataSource; |
| for (var c = 0; c < removedColumnsCount; c++) { |
| if (isTableUniform && logicColumns[0] !== logicColumns[c] - c) { |
| isTableUniform = false; |
| } |
| } |
| if (isTableUniform) { |
| for (var r = 0, |
| rlen = this.instance.countSourceRows(); r < rlen; r++) { |
| data[r].splice(logicColumns[0], amount); |
| } |
| } else { |
| for (var r$__10 = 0, |
| rlen$__11 = this.instance.countSourceRows(); r$__10 < rlen$__11; r$__10++) { |
| for (var c$__12 = 0; c$__12 < removedColumnsCount; c$__12++) { |
| data[r$__10].splice(descendingLogicColumns[c$__12], 1); |
| } |
| } |
| for (var c$__13 = 0; c$__13 < removedColumnsCount; c$__13++) { |
| this.priv.columnSettings.splice(logicColumns[c$__13], 1); |
| } |
| } |
| Handsontable.hooks.run(this.instance, 'afterRemoveCol', index, amount); |
| this.instance.forceFullRender = true; |
| }; |
| DataMap.prototype.spliceCol = function(col, index, amount) { |
| var elements = 4 <= arguments.length ? [].slice.call(arguments, 3) : []; |
| var colData = this.instance.getDataAtCol(col); |
| var removed = colData.slice(index, index + amount); |
| var after = colData.slice(index + amount); |
| extendArray(elements, after); |
| var i = 0; |
| while (i < amount) { |
| elements.push(null); |
| i++; |
| } |
| to2dArray(elements); |
| this.instance.populateFromArray(index, col, elements, null, null, 'spliceCol'); |
| return removed; |
| }; |
| DataMap.prototype.spliceRow = function(row, index, amount) { |
| var elements = 4 <= arguments.length ? [].slice.call(arguments, 3) : []; |
| var rowData = this.instance.getSourceDataAtRow(row); |
| var removed = rowData.slice(index, index + amount); |
| var after = rowData.slice(index + amount); |
| extendArray(elements, after); |
| var i = 0; |
| while (i < amount) { |
| elements.push(null); |
| i++; |
| } |
| this.instance.populateFromArray(row, index, [elements], null, null, 'spliceRow'); |
| return removed; |
| }; |
| DataMap.prototype.get = function(row, prop) { |
| row = Handsontable.hooks.run(this.instance, 'modifyRow', row); |
| var dataRow = this.dataSource[row]; |
| if (dataRow && dataRow.hasOwnProperty && dataRow.hasOwnProperty(prop)) { |
| return dataRow[prop]; |
| } else if (typeof prop === 'string' && prop.indexOf('.') > -1) { |
| var sliced = prop.split('.'); |
| var out = dataRow; |
| if (!out) { |
| return null; |
| } |
| for (var i = 0, |
| ilen = sliced.length; i < ilen; i++) { |
| out = out[sliced[i]]; |
| if (typeof out === 'undefined') { |
| return null; |
| } |
| } |
| return out; |
| } else if (typeof prop === 'function') { |
| return prop(this.dataSource.slice(row, row + 1)[0]); |
| } |
| return null; |
| }; |
| var copyableLookup = cellMethodLookupFactory('copyable', false); |
| DataMap.prototype.getCopyable = function(row, prop) { |
| if (copyableLookup.call(this.instance, row, this.propToCol(prop))) { |
| return this.get(row, prop); |
| } |
| return ''; |
| }; |
| DataMap.prototype.set = function(row, prop, value, source) { |
| row = Handsontable.hooks.run(this.instance, 'modifyRow', row, source || 'datamapGet'); |
| var dataRow = this.dataSource[row]; |
| if (dataRow && dataRow.hasOwnProperty && dataRow.hasOwnProperty(prop)) { |
| dataRow[prop] = value; |
| } else if (typeof prop === 'string' && prop.indexOf('.') > -1) { |
| var sliced = prop.split('.'); |
| var out = dataRow; |
| for (var i = 0, |
| ilen = sliced.length - 1; i < ilen; i++) { |
| if (typeof out[sliced[i]] === 'undefined') { |
| out[sliced[i]] = {}; |
| } |
| out = out[sliced[i]]; |
| } |
| out[sliced[i]] = value; |
| } else if (typeof prop === 'function') { |
| prop(this.dataSource.slice(row, row + 1)[0], value); |
| } else { |
| dataRow[prop] = value; |
| } |
| }; |
| DataMap.prototype.physicalRowsToLogical = function(index, amount) { |
| var totalRows = this.instance.countSourceRows(); |
| var physicRow = (totalRows + index) % totalRows; |
| var logicRows = []; |
| var rowsToRemove = amount; |
| var row; |
| while (physicRow < totalRows && rowsToRemove) { |
| row = Handsontable.hooks.run(this.instance, 'modifyRow', physicRow); |
| logicRows.push(row); |
| rowsToRemove--; |
| physicRow++; |
| } |
| return logicRows; |
| }; |
| DataMap.prototype.physicalColumnsToLogical = function(index, amount) { |
| var totalCols = this.instance.countCols(); |
| var physicalCol = (totalCols + index) % totalCols; |
| var logicalCols = []; |
| var colsToRemove = amount; |
| while (physicalCol < totalCols && colsToRemove) { |
| var col = Handsontable.hooks.run(this.instance, 'modifyCol', physicalCol); |
| logicalCols.push(col); |
| colsToRemove--; |
| physicalCol++; |
| } |
| return logicalCols; |
| }; |
| DataMap.prototype.clear = function() { |
| for (var r = 0; r < this.instance.countSourceRows(); r++) { |
| for (var c = 0; c < this.instance.countCols(); c++) { |
| this.set(r, this.colToProp(c), ''); |
| } |
| } |
| }; |
| DataMap.prototype.clearLengthCache = function() { |
| this.cachedLength = null; |
| }; |
| DataMap.prototype.getLength = function() { |
| var $__9 = this; |
| var length = this.instance.countSourceRows(); |
| if (Handsontable.hooks.has('modifyRow', this.instance)) { |
| var reValidate = false; |
| this.interval.start(); |
| if (length !== this.latestSourceRowsCount) { |
| reValidate = true; |
| } |
| this.latestSourceRowsCount = length; |
| if (this.cachedLength === null || reValidate) { |
| rangeEach(length - 1, (function(row) { |
| row = Handsontable.hooks.run($__9.instance, 'modifyRow', row); |
| if (row === null) { |
| --length; |
| } |
| })); |
| this.cachedLength = length; |
| } else { |
| length = this.cachedLength; |
| } |
| } else { |
| this.interval.stop(); |
| } |
| return length; |
| }; |
| DataMap.prototype.getAll = function() { |
| var start = { |
| row: 0, |
| col: 0 |
| }; |
| var end = { |
| row: Math.max(this.instance.countSourceRows() - 1, 0), |
| col: Math.max(this.instance.countCols() - 1, 0) |
| }; |
| if (start.row - end.row === 0 && !this.instance.countSourceRows()) { |
| return []; |
| } |
| return this.getRange(start, end, DataMap.prototype.DESTINATION_RENDERER); |
| }; |
| DataMap.prototype.getRange = function(start, end, destination) { |
| var r, |
| rlen, |
| c, |
| clen, |
| output = [], |
| row, |
| rowExists; |
| var getFn = destination === this.DESTINATION_CLIPBOARD_GENERATOR ? this.getCopyable : this.get; |
| rlen = Math.max(start.row, end.row); |
| clen = Math.max(start.col, end.col); |
| for (r = Math.min(start.row, end.row); r <= rlen; r++) { |
| row = []; |
| var physicalRow = Handsontable.hooks.run(this.instance, 'modifyRow', r); |
| for (c = Math.min(start.col, end.col); c <= clen; c++) { |
| var rowValue; |
| if (physicalRow === null) { |
| break; |
| } |
| row.push(getFn.call(this, r, this.colToProp(c))); |
| } |
| if (physicalRow !== null) { |
| output.push(row); |
| } |
| } |
| return output; |
| }; |
| DataMap.prototype.getText = function(start, end) { |
| return SheetClip.stringify(this.getRange(start, end, this.DESTINATION_RENDERER)); |
| }; |
| DataMap.prototype.getCopyableText = function(start, end) { |
| return SheetClip.stringify(this.getRange(start, end, this.DESTINATION_CLIPBOARD_GENERATOR)); |
| }; |
| DataMap.prototype.destroy = function() { |
| this.interval.stop(); |
| this.interval = null; |
| this.instance = null; |
| this.priv = null; |
| this.GridSettings = null; |
| this.dataSource = null; |
| this.cachedLength = null; |
| this.duckSchema = null; |
| }; |
| ; |
| |
| //# |
| },{"SheetClip":"SheetClip","browser":24,"helpers/array":43,"helpers/data":45,"helpers/number":52,"helpers/object":53,"helpers/setting":54,"multiMap":58,"utils/interval":116}],28:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| DataSource: {get: function() { |
| return DataSource; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__helpers_47_data__, |
| $__helpers_47_setting__, |
| $__helpers_47_object__, |
| $__helpers_47_array__, |
| $__helpers_47_number__; |
| var cellMethodLookupFactory = ($__helpers_47_data__ = _dereq_("helpers/data"), $__helpers_47_data__ && $__helpers_47_data__.__esModule && $__helpers_47_data__ || {default: $__helpers_47_data__}).cellMethodLookupFactory; |
| var columnFactory = ($__helpers_47_setting__ = _dereq_("helpers/setting"), $__helpers_47_setting__ && $__helpers_47_setting__.__esModule && $__helpers_47_setting__ || {default: $__helpers_47_setting__}).columnFactory; |
| var $__2 = ($__helpers_47_object__ = _dereq_("helpers/object"), $__helpers_47_object__ && $__helpers_47_object__.__esModule && $__helpers_47_object__ || {default: $__helpers_47_object__}), |
| duckSchema = $__2.duckSchema, |
| deepExtend = $__2.deepExtend, |
| getProperty = $__2.getProperty; |
| var $__3 = ($__helpers_47_array__ = _dereq_("helpers/array"), $__helpers_47_array__ && $__helpers_47_array__.__esModule && $__helpers_47_array__ || {default: $__helpers_47_array__}), |
| extendArray = $__3.extendArray, |
| arrayEach = $__3.arrayEach; |
| var rangeEach = ($__helpers_47_number__ = _dereq_("helpers/number"), $__helpers_47_number__ && $__helpers_47_number__.__esModule && $__helpers_47_number__ || {default: $__helpers_47_number__}).rangeEach; |
| var DataSource = function DataSource(hotInstance) { |
| var dataSource = arguments[1] !== (void 0) ? arguments[1] : []; |
| this.hot = hotInstance; |
| this.data = dataSource; |
| this.dataType = 'array'; |
| this.colToProp = (function() {}); |
| this.propToCol = (function() {}); |
| }; |
| ($traceurRuntime.createClass)(DataSource, { |
| getData: function() { |
| return this.data; |
| }, |
| setData: function(data) { |
| this.data = data; |
| }, |
| getAtColumn: function(column) { |
| var $__5 = this; |
| var result = []; |
| arrayEach(this.data, (function(row) { |
| var property = $__5.colToProp(column); |
| if (typeof property === 'string') { |
| row = getProperty(row, property); |
| } else { |
| row = row[property]; |
| } |
| result.push(row); |
| })); |
| return result; |
| }, |
| getAtRow: function(row) { |
| return this.data[row]; |
| }, |
| getAtCell: function(row, column) { |
| return this.data[row][this.colToProp(column)]; |
| }, |
| getByRange: function(start, end) { |
| var $__5 = this; |
| var startRow = Math.min(start.row, end.row); |
| var startCol = Math.min(start.col, end.col); |
| var endRow = Math.max(start.row, end.row); |
| var endCol = Math.max(start.col, end.col); |
| var result = []; |
| rangeEach(startRow, endRow, (function(currentRow) { |
| var row = $__5.getAtRow(currentRow); |
| var newRow; |
| if ($__5.dataType === 'array') { |
| newRow = row.slice(startCol, endCol); |
| } else if ($__5.dataType === 'object') { |
| newRow = {}; |
| rangeEach(startCol, endCol, (function(column) { |
| var prop = $__5.colToProp(column); |
| newRow[prop] = row[prop]; |
| })); |
| } |
| result.push(newRow); |
| })); |
| return result; |
| }, |
| destroy: function() { |
| this.data = null; |
| this.hot = null; |
| } |
| }, {}); |
| ; |
| |
| //# |
| },{"helpers/array":43,"helpers/data":45,"helpers/number":52,"helpers/object":53,"helpers/setting":54}],29:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| EditorManager: {get: function() { |
| return EditorManager; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__browser__, |
| $__3rdparty_47_walkontable_47_src_47_cell_47_coords__, |
| $__helpers_47_unicode__, |
| $__helpers_47_dom_47_event__, |
| $__editors__, |
| $__eventManager__; |
| var Handsontable = ($__browser__ = _dereq_("browser"), $__browser__ && $__browser__.__esModule && $__browser__ || {default: $__browser__}).default; |
| var WalkontableCellCoords = ($__3rdparty_47_walkontable_47_src_47_cell_47_coords__ = _dereq_("3rdparty/walkontable/src/cell/coords"), $__3rdparty_47_walkontable_47_src_47_cell_47_coords__ && $__3rdparty_47_walkontable_47_src_47_cell_47_coords__.__esModule && $__3rdparty_47_walkontable_47_src_47_cell_47_coords__ || {default: $__3rdparty_47_walkontable_47_src_47_cell_47_coords__}).WalkontableCellCoords; |
| var $__2 = ($__helpers_47_unicode__ = _dereq_("helpers/unicode"), $__helpers_47_unicode__ && $__helpers_47_unicode__.__esModule && $__helpers_47_unicode__ || {default: $__helpers_47_unicode__}), |
| KEY_CODES = $__2.KEY_CODES, |
| isMetaKey = $__2.isMetaKey, |
| isCtrlKey = $__2.isCtrlKey; |
| var $__3 = ($__helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $__helpers_47_dom_47_event__ && $__helpers_47_dom_47_event__.__esModule && $__helpers_47_dom_47_event__ || {default: $__helpers_47_dom_47_event__}), |
| stopPropagation = $__3.stopPropagation, |
| stopImmediatePropagation = $__3.stopImmediatePropagation, |
| isImmediatePropagationStopped = $__3.isImmediatePropagationStopped; |
| var getEditor = ($__editors__ = _dereq_("editors"), $__editors__ && $__editors__.__esModule && $__editors__ || {default: $__editors__}).getEditor; |
| var eventManagerObject = ($__eventManager__ = _dereq_("eventManager"), $__eventManager__ && $__eventManager__.__esModule && $__eventManager__ || {default: $__eventManager__}).eventManager; |
| ; |
| Handsontable.EditorManager = EditorManager; |
| function EditorManager(instance, priv, selection) { |
| var _this = this, |
| destroyed = false, |
| eventManager, |
| activeEditor; |
| eventManager = eventManagerObject(instance); |
| function moveSelectionAfterEnter(shiftKey) { |
| var enterMoves = typeof priv.settings.enterMoves === 'function' ? priv.settings.enterMoves(event) : priv.settings.enterMoves; |
| if (shiftKey) { |
| selection.transformStart(-enterMoves.row, -enterMoves.col); |
| } else { |
| selection.transformStart(enterMoves.row, enterMoves.col, true); |
| } |
| } |
| function moveSelectionUp(shiftKey) { |
| if (shiftKey) { |
| selection.transformEnd(-1, 0); |
| } else { |
| selection.transformStart(-1, 0); |
| } |
| } |
| function moveSelectionDown(shiftKey) { |
| if (shiftKey) { |
| selection.transformEnd(1, 0); |
| } else { |
| selection.transformStart(1, 0); |
| } |
| } |
| function moveSelectionRight(shiftKey) { |
| if (shiftKey) { |
| selection.transformEnd(0, 1); |
| } else { |
| selection.transformStart(0, 1); |
| } |
| } |
| function moveSelectionLeft(shiftKey) { |
| if (shiftKey) { |
| selection.transformEnd(0, -1); |
| } else { |
| selection.transformStart(0, -1); |
| } |
| } |
| function onKeyDown(event) { |
| var ctrlDown, |
| rangeModifier; |
| if (!instance.isListening()) { |
| return; |
| } |
| Handsontable.hooks.run(instance, 'beforeKeyDown', event); |
| if (destroyed) { |
| return; |
| } |
| if (isImmediatePropagationStopped(event)) { |
| return; |
| } |
| priv.lastKeyCode = event.keyCode; |
| if (!selection.isSelected()) { |
| return; |
| } |
| ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey; |
| if (activeEditor && !activeEditor.isWaiting()) { |
| if (!isMetaKey(event.keyCode) && !isCtrlKey(event.keyCode) && !ctrlDown && !_this.isEditorOpened()) { |
| _this.openEditor('', event); |
| return; |
| } |
| } |
| rangeModifier = event.shiftKey ? selection.setRangeEnd : selection.setRangeStart; |
| switch (event.keyCode) { |
| case KEY_CODES.A: |
| if (!_this.isEditorOpened() && ctrlDown) { |
| selection.selectAll(); |
| event.preventDefault(); |
| stopPropagation(event); |
| } |
| break; |
| case KEY_CODES.ARROW_UP: |
| if (_this.isEditorOpened() && !activeEditor.isWaiting()) { |
| _this.closeEditorAndSaveChanges(ctrlDown); |
| } |
| moveSelectionUp(event.shiftKey); |
| event.preventDefault(); |
| stopPropagation(event); |
| break; |
| case KEY_CODES.ARROW_DOWN: |
| if (_this.isEditorOpened() && !activeEditor.isWaiting()) { |
| _this.closeEditorAndSaveChanges(ctrlDown); |
| } |
| moveSelectionDown(event.shiftKey); |
| event.preventDefault(); |
| stopPropagation(event); |
| break; |
| case KEY_CODES.ARROW_RIGHT: |
| if (_this.isEditorOpened() && !activeEditor.isWaiting()) { |
| _this.closeEditorAndSaveChanges(ctrlDown); |
| } |
| moveSelectionRight(event.shiftKey); |
| event.preventDefault(); |
| stopPropagation(event); |
| break; |
| case KEY_CODES.ARROW_LEFT: |
| if (_this.isEditorOpened() && !activeEditor.isWaiting()) { |
| _this.closeEditorAndSaveChanges(ctrlDown); |
| } |
| moveSelectionLeft(event.shiftKey); |
| event.preventDefault(); |
| stopPropagation(event); |
| break; |
| case KEY_CODES.TAB: |
| var tabMoves = typeof priv.settings.tabMoves === 'function' ? priv.settings.tabMoves(event) : priv.settings.tabMoves; |
| if (event.shiftKey) { |
| selection.transformStart(-tabMoves.row, -tabMoves.col); |
| } else { |
| selection.transformStart(tabMoves.row, tabMoves.col, true); |
| } |
| event.preventDefault(); |
| stopPropagation(event); |
| break; |
| case KEY_CODES.BACKSPACE: |
| case KEY_CODES.DELETE: |
| selection.empty(event); |
| _this.prepareEditor(); |
| event.preventDefault(); |
| break; |
| case KEY_CODES.F2: |
| _this.openEditor(null, event); |
| if (activeEditor) { |
| activeEditor.enableFullEditMode(); |
| } |
| event.preventDefault(); |
| break; |
| case KEY_CODES.ENTER: |
| if (_this.isEditorOpened()) { |
| if (activeEditor && activeEditor.state !== Handsontable.EditorState.WAITING) { |
| _this.closeEditorAndSaveChanges(ctrlDown); |
| } |
| moveSelectionAfterEnter(event.shiftKey); |
| } else { |
| if (instance.getSettings().enterBeginsEditing) { |
| _this.openEditor(null, event); |
| if (activeEditor) { |
| activeEditor.enableFullEditMode(); |
| } |
| } else { |
| moveSelectionAfterEnter(event.shiftKey); |
| } |
| } |
| event.preventDefault(); |
| stopImmediatePropagation(event); |
| break; |
| case KEY_CODES.ESCAPE: |
| if (_this.isEditorOpened()) { |
| _this.closeEditorAndRestoreOriginalValue(ctrlDown); |
| } |
| event.preventDefault(); |
| break; |
| case KEY_CODES.HOME: |
| if (event.ctrlKey || event.metaKey) { |
| rangeModifier(new WalkontableCellCoords(0, priv.selRange.from.col)); |
| } else { |
| rangeModifier(new WalkontableCellCoords(priv.selRange.from.row, 0)); |
| } |
| event.preventDefault(); |
| stopPropagation(event); |
| break; |
| case KEY_CODES.END: |
| if (event.ctrlKey || event.metaKey) { |
| rangeModifier(new WalkontableCellCoords(instance.countRows() - 1, priv.selRange.from.col)); |
| } else { |
| rangeModifier(new WalkontableCellCoords(priv.selRange.from.row, instance.countCols() - 1)); |
| } |
| event.preventDefault(); |
| stopPropagation(event); |
| break; |
| case KEY_CODES.PAGE_UP: |
| selection.transformStart(-instance.countVisibleRows(), 0); |
| event.preventDefault(); |
| stopPropagation(event); |
| break; |
| case KEY_CODES.PAGE_DOWN: |
| selection.transformStart(instance.countVisibleRows(), 0); |
| event.preventDefault(); |
| stopPropagation(event); |
| break; |
| } |
| } |
| function init() { |
| instance.addHook('afterDocumentKeyDown', onKeyDown); |
| eventManager.addEventListener(document.documentElement, 'keydown', function(event) { |
| instance.runHooks('afterDocumentKeyDown', event); |
| }); |
| function onDblClick(event, coords, elem) { |
| if (elem.nodeName == 'TD') { |
| _this.openEditor(); |
| if (activeEditor) { |
| activeEditor.enableFullEditMode(); |
| } |
| } |
| } |
| instance.view.wt.update('onCellDblClick', onDblClick); |
| instance.addHook('afterDestroy', function() { |
| destroyed = true; |
| }); |
| } |
| this.destroyEditor = function(revertOriginal) { |
| this.closeEditor(revertOriginal); |
| }; |
| this.getActiveEditor = function() { |
| return activeEditor; |
| }; |
| this.prepareEditor = function() { |
| var row, |
| col, |
| prop, |
| td, |
| originalValue, |
| cellProperties, |
| editorClass; |
| if (activeEditor && activeEditor.isWaiting()) { |
| this.closeEditor(false, false, function(dataSaved) { |
| if (dataSaved) { |
| _this.prepareEditor(); |
| } |
| }); |
| return; |
| } |
| row = priv.selRange.highlight.row; |
| col = priv.selRange.highlight.col; |
| prop = instance.colToProp(col); |
| td = instance.getCell(row, col); |
| originalValue = instance.getDataAtCell(row, col); |
| cellProperties = instance.getCellMeta(row, col); |
| editorClass = instance.getCellEditor(cellProperties); |
| if (editorClass) { |
| activeEditor = Handsontable.editors.getEditor(editorClass, instance); |
| activeEditor.prepare(row, col, prop, td, originalValue, cellProperties); |
| } else { |
| activeEditor = void 0; |
| } |
| }; |
| this.isEditorOpened = function() { |
| return activeEditor && activeEditor.isOpened(); |
| }; |
| this.openEditor = function(initialValue, event) { |
| if (activeEditor && !activeEditor.cellProperties.readOnly) { |
| activeEditor.beginEditing(initialValue, event); |
| } else if (activeEditor && activeEditor.cellProperties.readOnly) { |
| if (event && event.keyCode === KEY_CODES.ENTER) { |
| moveSelectionAfterEnter(); |
| } |
| } |
| }; |
| this.closeEditor = function(restoreOriginalValue, ctrlDown, callback) { |
| if (activeEditor) { |
| activeEditor.finishEditing(restoreOriginalValue, ctrlDown, callback); |
| } else { |
| if (callback) { |
| callback(false); |
| } |
| } |
| }; |
| this.closeEditorAndSaveChanges = function(ctrlDown) { |
| return this.closeEditor(false, ctrlDown); |
| }; |
| this.closeEditorAndRestoreOriginalValue = function(ctrlDown) { |
| return this.closeEditor(true, ctrlDown); |
| }; |
| init(); |
| } |
| |
| //# |
| },{"3rdparty/walkontable/src/cell/coords":6,"browser":24,"editors":30,"eventManager":42,"helpers/dom/event":48,"helpers/unicode":56}],30:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| registerEditor: {get: function() { |
| return registerEditor; |
| }}, |
| getEditor: {get: function() { |
| return getEditor; |
| }}, |
| hasEditor: {get: function() { |
| return hasEditor; |
| }}, |
| getEditorConstructor: {get: function() { |
| return getEditorConstructor; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__browser__, |
| $__helpers_47_string__; |
| var Handsontable = ($__browser__ = _dereq_("browser"), $__browser__ && $__browser__.__esModule && $__browser__ || {default: $__browser__}).default; |
| var toUpperCaseFirst = ($__helpers_47_string__ = _dereq_("helpers/string"), $__helpers_47_string__ && $__helpers_47_string__.__esModule && $__helpers_47_string__ || {default: $__helpers_47_string__}).toUpperCaseFirst; |
| ; |
| var registeredEditorNames = {}, |
| registeredEditorClasses = new WeakMap(); |
| Handsontable.editors = Handsontable.editors || {}; |
| Handsontable.editors.registerEditor = registerEditor; |
| Handsontable.editors.getEditor = getEditor; |
| function RegisteredEditor(editorClass) { |
| var Clazz, |
| instances; |
| instances = {}; |
| Clazz = editorClass; |
| this.getConstructor = function() { |
| return editorClass; |
| }; |
| this.getInstance = function(hotInstance) { |
| if (!(hotInstance.guid in instances)) { |
| instances[hotInstance.guid] = new Clazz(hotInstance); |
| } |
| return instances[hotInstance.guid]; |
| }; |
| } |
| function registerEditor(editorName, editorClass) { |
| var editor = new RegisteredEditor(editorClass); |
| if (typeof editorName === 'string') { |
| registeredEditorNames[editorName] = editor; |
| Handsontable.editors[toUpperCaseFirst(editorName) + 'Editor'] = editorClass; |
| } |
| registeredEditorClasses.set(editorClass, editor); |
| } |
| function getEditor(editorName, hotInstance) { |
| var editor; |
| if (typeof editorName == 'function') { |
| if (!(registeredEditorClasses.get(editorName))) { |
| registerEditor(null, editorName); |
| } |
| editor = registeredEditorClasses.get(editorName); |
| } else if (typeof editorName == 'string') { |
| editor = registeredEditorNames[editorName]; |
| } else { |
| throw Error('Only strings and functions can be passed as "editor" parameter '); |
| } |
| if (!editor) { |
| throw Error('No editor registered under name "' + editorName + '"'); |
| } |
| return editor.getInstance(hotInstance); |
| } |
| function getEditorConstructor(editorName) { |
| var editor; |
| if (typeof editorName == 'string') { |
| editor = registeredEditorNames[editorName]; |
| } else { |
| throw Error('Only strings and functions can be passed as "editor" parameter '); |
| } |
| if (!editor) { |
| throw Error('No editor registered under name "' + editorName + '"'); |
| } |
| return editor.getConstructor(); |
| } |
| function hasEditor(editorName) { |
| return registeredEditorNames[editorName] ? true : false; |
| } |
| |
| //# |
| },{"browser":24,"helpers/string":55}],31:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| BaseEditor: {get: function() { |
| return BaseEditor; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $___46__46__47_helpers_47_mixed__, |
| $___46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var stringify = ($___46__46__47_helpers_47_mixed__ = _dereq_("helpers/mixed"), $___46__46__47_helpers_47_mixed__ && $___46__46__47_helpers_47_mixed__.__esModule && $___46__46__47_helpers_47_mixed__ || {default: $___46__46__47_helpers_47_mixed__}).stringify; |
| var WalkontableCellCoords = ($___46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ = _dereq_("3rdparty/walkontable/src/cell/coords"), $___46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ && $___46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__.__esModule && $___46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ || {default: $___46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__}).WalkontableCellCoords; |
| ; |
| Handsontable.editors = Handsontable.editors || {}; |
| Handsontable.editors.BaseEditor = BaseEditor; |
| Handsontable.EditorState = { |
| VIRGIN: 'STATE_VIRGIN', |
| EDITING: 'STATE_EDITING', |
| WAITING: 'STATE_WAITING', |
| FINISHED: 'STATE_FINISHED' |
| }; |
| function BaseEditor(instance) { |
| this.instance = instance; |
| this.state = Handsontable.EditorState.VIRGIN; |
| this._opened = false; |
| this._fullEditMode = false; |
| this._closeCallback = null; |
| this.init(); |
| } |
| BaseEditor.prototype._fireCallbacks = function(result) { |
| if (this._closeCallback) { |
| this._closeCallback(result); |
| this._closeCallback = null; |
| } |
| }; |
| BaseEditor.prototype.init = function() {}; |
| BaseEditor.prototype.getValue = function() { |
| throw Error('Editor getValue() method unimplemented'); |
| }; |
| BaseEditor.prototype.setValue = function(newValue) { |
| throw Error('Editor setValue() method unimplemented'); |
| }; |
| BaseEditor.prototype.open = function() { |
| throw Error('Editor open() method unimplemented'); |
| }; |
| BaseEditor.prototype.close = function() { |
| throw Error('Editor close() method unimplemented'); |
| }; |
| BaseEditor.prototype.prepare = function(row, col, prop, td, originalValue, cellProperties) { |
| this.TD = td; |
| this.row = row; |
| this.col = col; |
| this.prop = prop; |
| this.originalValue = originalValue; |
| this.cellProperties = cellProperties; |
| if (this.instance.view.isMouseDown() && document.activeElement && document.activeElement !== document.body) { |
| document.activeElement.blur(); |
| } else if (!document.activeElement) { |
| document.body.focus(); |
| } |
| this.state = Handsontable.EditorState.VIRGIN; |
| }; |
| BaseEditor.prototype.extend = function() { |
| var baseClass = this.constructor; |
| function Editor() { |
| baseClass.apply(this, arguments); |
| } |
| function inherit(Child, Parent) { |
| function Bridge() {} |
| Bridge.prototype = Parent.prototype; |
| Child.prototype = new Bridge(); |
| Child.prototype.constructor = Child; |
| return Child; |
| } |
| return inherit(Editor, baseClass); |
| }; |
| BaseEditor.prototype.saveValue = function(val, ctrlDown) { |
| var sel, |
| tmp; |
| if (ctrlDown) { |
| sel = this.instance.getSelected(); |
| if (sel[0] > sel[2]) { |
| tmp = sel[0]; |
| sel[0] = sel[2]; |
| sel[2] = tmp; |
| } |
| if (sel[1] > sel[3]) { |
| tmp = sel[1]; |
| sel[1] = sel[3]; |
| sel[3] = tmp; |
| } |
| this.instance.populateFromArray(sel[0], sel[1], val, sel[2], sel[3], 'edit'); |
| } else { |
| this.instance.populateFromArray(this.row, this.col, val, null, null, 'edit'); |
| } |
| }; |
| BaseEditor.prototype.beginEditing = function(initialValue, event) { |
| if (this.state != Handsontable.EditorState.VIRGIN) { |
| return; |
| } |
| this.instance.view.scrollViewport(new WalkontableCellCoords(this.row, this.col)); |
| this.instance.view.render(); |
| this.state = Handsontable.EditorState.EDITING; |
| initialValue = typeof initialValue == 'string' ? initialValue : this.originalValue; |
| this.setValue(stringify(initialValue)); |
| this.open(event); |
| this._opened = true; |
| this.focus(); |
| this.instance.view.render(); |
| }; |
| BaseEditor.prototype.finishEditing = function(restoreOriginalValue, ctrlDown, callback) { |
| var _this = this, |
| val; |
| if (callback) { |
| var previousCloseCallback = this._closeCallback; |
| this._closeCallback = function(result) { |
| if (previousCloseCallback) { |
| previousCloseCallback(result); |
| } |
| callback(result); |
| }; |
| } |
| if (this.isWaiting()) { |
| return; |
| } |
| if (this.state == Handsontable.EditorState.VIRGIN) { |
| this.instance._registerTimeout(setTimeout(function() { |
| _this._fireCallbacks(true); |
| }, 0)); |
| return; |
| } |
| if (this.state == Handsontable.EditorState.EDITING) { |
| if (restoreOriginalValue) { |
| this.cancelChanges(); |
| this.instance.view.render(); |
| return; |
| } |
| var value = this.getValue(); |
| if (this.instance.getSettings().trimWhitespace) { |
| val = [[typeof value === 'string' ? String.prototype.trim.call(value || '') : value]]; |
| } else { |
| val = [[value]]; |
| } |
| this.state = Handsontable.EditorState.WAITING; |
| this.saveValue(val, ctrlDown); |
| if (this.instance.getCellValidator(this.cellProperties)) { |
| this.instance.addHookOnce('postAfterValidate', function(result) { |
| _this.state = Handsontable.EditorState.FINISHED; |
| _this.discardEditor(result); |
| }); |
| } else { |
| this.state = Handsontable.EditorState.FINISHED; |
| this.discardEditor(true); |
| } |
| } |
| }; |
| BaseEditor.prototype.cancelChanges = function() { |
| this.state = Handsontable.EditorState.FINISHED; |
| this.discardEditor(); |
| }; |
| BaseEditor.prototype.discardEditor = function(result) { |
| if (this.state !== Handsontable.EditorState.FINISHED) { |
| return; |
| } |
| if (result === false && this.cellProperties.allowInvalid !== true) { |
| this.instance.selectCell(this.row, this.col); |
| this.focus(); |
| this.state = Handsontable.EditorState.EDITING; |
| this._fireCallbacks(false); |
| } else { |
| this.close(); |
| this._opened = false; |
| this._fullEditMode = false; |
| this.state = Handsontable.EditorState.VIRGIN; |
| this._fireCallbacks(true); |
| } |
| }; |
| BaseEditor.prototype.enableFullEditMode = function() { |
| this._fullEditMode = true; |
| }; |
| BaseEditor.prototype.isInFullEditMode = function() { |
| return this._fullEditMode; |
| }; |
| BaseEditor.prototype.isOpened = function() { |
| return this._opened; |
| }; |
| BaseEditor.prototype.isWaiting = function() { |
| return this.state === Handsontable.EditorState.WAITING; |
| }; |
| BaseEditor.prototype.checkEditorSection = function() { |
| var totalRows = this.instance.countRows(); |
| var section = ''; |
| if (this.row < this.instance.getSettings().fixedRowsTop) { |
| if (this.col < this.instance.getSettings().fixedColumnsLeft) { |
| section = 'top-left-corner'; |
| } else { |
| section = 'top'; |
| } |
| } else if (this.instance.getSettings().fixedRowsBottom && this.row >= totalRows - this.instance.getSettings().fixedRowsBottom) { |
| if (this.col < this.instance.getSettings().fixedColumnsLeft) { |
| section = 'bottom-left-corner'; |
| } else { |
| section = 'bottom'; |
| } |
| } else { |
| if (this.col < this.instance.getSettings().fixedColumnsLeft) { |
| section = 'left'; |
| } |
| } |
| return section; |
| }; |
| |
| //# |
| },{"3rdparty/walkontable/src/cell/coords":6,"browser":24,"helpers/mixed":51}],32:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| AutocompleteEditor: {get: function() { |
| return AutocompleteEditor; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $___46__46__47_helpers_47_unicode__, |
| $___46__46__47_helpers_47_mixed__, |
| $___46__46__47_helpers_47_array__, |
| $___46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47_editors__, |
| $__handsontableEditor__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47_helpers_47_unicode__ = _dereq_("helpers/unicode"), $___46__46__47_helpers_47_unicode__ && $___46__46__47_helpers_47_unicode__.__esModule && $___46__46__47_helpers_47_unicode__ || {default: $___46__46__47_helpers_47_unicode__}), |
| KEY_CODES = $__1.KEY_CODES, |
| isPrintableChar = $__1.isPrintableChar; |
| var stringify = ($___46__46__47_helpers_47_mixed__ = _dereq_("helpers/mixed"), $___46__46__47_helpers_47_mixed__ && $___46__46__47_helpers_47_mixed__.__esModule && $___46__46__47_helpers_47_mixed__ || {default: $___46__46__47_helpers_47_mixed__}).stringify; |
| var pivot = ($___46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47_helpers_47_array__ && $___46__46__47_helpers_47_array__.__esModule && $___46__46__47_helpers_47_array__ || {default: $___46__46__47_helpers_47_array__}).pivot; |
| var $__4 = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__4.addClass, |
| getCaretPosition = $__4.getCaretPosition, |
| getScrollbarWidth = $__4.getScrollbarWidth, |
| getSelectionEndPosition = $__4.getSelectionEndPosition, |
| outerWidth = $__4.outerWidth, |
| outerHeight = $__4.outerHeight, |
| offset = $__4.offset, |
| getTrimmingContainer = $__4.getTrimmingContainer, |
| setCaretPosition = $__4.setCaretPosition; |
| var registerEditor = ($___46__46__47_editors__ = _dereq_("editors"), $___46__46__47_editors__ && $___46__46__47_editors__.__esModule && $___46__46__47_editors__ || {default: $___46__46__47_editors__}).registerEditor; |
| var HandsontableEditor = ($__handsontableEditor__ = _dereq_("handsontableEditor"), $__handsontableEditor__ && $__handsontableEditor__.__esModule && $__handsontableEditor__ || {default: $__handsontableEditor__}).HandsontableEditor; |
| var AutocompleteEditor = HandsontableEditor.prototype.extend(); |
| AutocompleteEditor.prototype.init = function() { |
| HandsontableEditor.prototype.init.apply(this, arguments); |
| this.query = null; |
| this.choices = []; |
| }; |
| AutocompleteEditor.prototype.createElements = function() { |
| HandsontableEditor.prototype.createElements.apply(this, arguments); |
| addClass(this.htContainer, 'autocompleteEditor'); |
| addClass(this.htContainer, window.navigator.platform.indexOf('Mac') === -1 ? '' : 'htMacScroll'); |
| }; |
| var skipOne = false; |
| function onBeforeKeyDown(event) { |
| skipOne = false; |
| var editor = this.getActiveEditor(); |
| if (isPrintableChar(event.keyCode) || event.keyCode === KEY_CODES.BACKSPACE || event.keyCode === KEY_CODES.DELETE || event.keyCode === KEY_CODES.INSERT) { |
| var timeOffset = 0; |
| if (event.keyCode === KEY_CODES.C && (event.ctrlKey || event.metaKey)) { |
| return; |
| } |
| if (!editor.isOpened()) { |
| timeOffset += 10; |
| } |
| if (editor.htEditor) { |
| editor.instance._registerTimeout(setTimeout(function() { |
| editor.queryChoices(editor.TEXTAREA.value); |
| skipOne = true; |
| }, timeOffset)); |
| } |
| } |
| } |
| AutocompleteEditor.prototype.prepare = function() { |
| this.instance.addHook('beforeKeyDown', onBeforeKeyDown); |
| HandsontableEditor.prototype.prepare.apply(this, arguments); |
| }; |
| AutocompleteEditor.prototype.open = function() { |
| this.TEXTAREA_PARENT.style.overflow = 'auto'; |
| HandsontableEditor.prototype.open.apply(this, arguments); |
| this.TEXTAREA_PARENT.style.overflow = ''; |
| var choicesListHot = this.htEditor.getInstance(); |
| var _this = this; |
| var trimDropdown = this.cellProperties.trimDropdown === void 0 ? true : this.cellProperties.trimDropdown; |
| this.TEXTAREA.style.visibility = 'visible'; |
| this.focus(); |
| choicesListHot.updateSettings({ |
| colWidths: trimDropdown ? [outerWidth(this.TEXTAREA) - 2] : void 0, |
| width: trimDropdown ? outerWidth(this.TEXTAREA) + getScrollbarWidth() + 2 : void 0, |
| afterRenderer: function(TD, row, col, prop, value) { |
| var caseSensitive = this.getCellMeta(row, col).filteringCaseSensitive === true; |
| var indexOfMatch; |
| var match; |
| value = stringify(value); |
| if (value) { |
| indexOfMatch = caseSensitive ? value.indexOf(this.query) : value.toLowerCase().indexOf(_this.query.toLowerCase()); |
| if (indexOfMatch != -1) { |
| match = value.substr(indexOfMatch, _this.query.length); |
| TD.innerHTML = value.replace(match, '<strong>' + match + '</strong>'); |
| } |
| } |
| }, |
| autoColumnSize: true, |
| modifyColWidth: function(width, col) { |
| var autoWidths = this.getPlugin('autoColumnSize').widths; |
| if (autoWidths[col]) { |
| width = autoWidths[col]; |
| } |
| return trimDropdown ? width : width + 15; |
| } |
| }); |
| this.htEditor.view.wt.wtTable.holder.parentNode.style['padding-right'] = getScrollbarWidth() + 2 + 'px'; |
| if (skipOne) { |
| skipOne = false; |
| } |
| _this.instance._registerTimeout(setTimeout(function() { |
| _this.queryChoices(_this.TEXTAREA.value); |
| }, 0)); |
| }; |
| AutocompleteEditor.prototype.close = function() { |
| HandsontableEditor.prototype.close.apply(this, arguments); |
| }; |
| AutocompleteEditor.prototype.queryChoices = function(query) { |
| this.query = query; |
| var source = this.cellProperties.source; |
| var hasFilter = this.cellProperties.filter; |
| var filteringCaseSensitive = this.cellProperties.filteringCaseSensitive; |
| if (typeof source == 'function') { |
| var _this = this; |
| source.call(this.cellProperties, query, function(choices) { |
| _this.updateChoicesList(choices); |
| }); |
| } else if (Array.isArray(source)) { |
| var choices; |
| if (!query || hasFilter === false) { |
| choices = source; |
| } else { |
| var lowerCaseQuery = query.toLowerCase(); |
| choices = source.filter(function(choice) { |
| if (filteringCaseSensitive) { |
| return choice.indexOf(query) != -1; |
| } else { |
| return choice.toLowerCase().indexOf(lowerCaseQuery) != -1; |
| } |
| }); |
| } |
| this.updateChoicesList(choices); |
| } else { |
| this.updateChoicesList([]); |
| } |
| }; |
| AutocompleteEditor.prototype.updateChoicesList = function(choices) { |
| var pos = getCaretPosition(this.TEXTAREA); |
| var endPos = getSelectionEndPosition(this.TEXTAREA); |
| var sortByRelevanceSetting = this.cellProperties.sortByRelevance; |
| var filterSetting = this.cellProperties.filter; |
| var orderByRelevance = null; |
| var highlightIndex = null; |
| if (sortByRelevanceSetting) { |
| orderByRelevance = AutocompleteEditor.sortByRelevance(this.getValue(), choices, this.cellProperties.filteringCaseSensitive); |
| } |
| if (filterSetting === false) { |
| if (orderByRelevance) { |
| highlightIndex = orderByRelevance[0]; |
| } else { |
| highlightIndex = 0; |
| } |
| } else { |
| var sorted = []; |
| for (var i = 0, |
| choicesCount = choices.length; i < choicesCount; i++) { |
| if (orderByRelevance) { |
| sorted.push(choices[orderByRelevance[i]]); |
| } else { |
| sorted.push(choices[i]); |
| } |
| } |
| highlightIndex = 0; |
| choices = sorted; |
| } |
| this.choices = choices; |
| this.htEditor.loadData(pivot([choices])); |
| this.updateDropdownHeight(); |
| this.flipDropdownIfNeeded(); |
| if (this.cellProperties.strict === true) { |
| this.highlightBestMatchingChoice(highlightIndex); |
| } |
| this.instance.listen(); |
| this.TEXTAREA.focus(); |
| setCaretPosition(this.TEXTAREA, pos, (pos === endPos ? void 0 : endPos)); |
| }; |
| AutocompleteEditor.prototype.flipDropdownIfNeeded = function() { |
| var textareaOffset = offset(this.TEXTAREA); |
| var textareaHeight = outerHeight(this.TEXTAREA); |
| var dropdownHeight = this.getDropdownHeight(); |
| var trimmingContainer = getTrimmingContainer(this.instance.view.wt.wtTable.TABLE); |
| var containerOffset = { |
| row: 0, |
| col: 0 |
| }; |
| if (trimmingContainer !== window) { |
| containerOffset = offset(trimmingContainer); |
| } |
| var spaceBelow = containerOffset.top + (trimmingContainer.scrollHeight - trimmingContainer.scrollTop); |
| var spaceAbove = containerOffset.top + trimmingContainer.scrollHeight; |
| var flipNeeded = (textareaOffset.top + textareaHeight + dropdownHeight > spaceBelow); |
| if (flipNeeded && spaceAbove > spaceBelow) { |
| this.flipDropdown(dropdownHeight); |
| } else { |
| this.unflipDropdown(); |
| } |
| }; |
| AutocompleteEditor.prototype.flipDropdown = function(dropdownHeight) { |
| var dropdownStyle = this.htEditor.rootElement.style; |
| dropdownStyle.position = 'absolute'; |
| dropdownStyle.top = -dropdownHeight + 'px'; |
| this.htEditor.flipped = true; |
| }; |
| AutocompleteEditor.prototype.unflipDropdown = function() { |
| var dropdownStyle = this.htEditor.rootElement.style; |
| if (dropdownStyle.position === 'absolute') { |
| dropdownStyle.position = ''; |
| dropdownStyle.top = ''; |
| } |
| this.htEditor.flipped = void 0; |
| }; |
| AutocompleteEditor.prototype.updateDropdownHeight = function() { |
| var currentDropdownWidth = this.htEditor.getColWidth(0) + getScrollbarWidth() + 2; |
| var trimDropdown = this.cellProperties.trimDropdown; |
| this.htEditor.updateSettings({ |
| height: this.getDropdownHeight(), |
| width: trimDropdown ? void 0 : currentDropdownWidth |
| }); |
| this.htEditor.view.wt.wtTable.alignOverlaysWithTrimmingContainer(); |
| }; |
| AutocompleteEditor.prototype.finishEditing = function(restoreOriginalValue) { |
| if (!restoreOriginalValue) { |
| this.instance.removeHook('beforeKeyDown', onBeforeKeyDown); |
| } |
| HandsontableEditor.prototype.finishEditing.apply(this, arguments); |
| }; |
| AutocompleteEditor.prototype.highlightBestMatchingChoice = function(index) { |
| if (typeof index === 'number') { |
| this.htEditor.selectCell(index, 0); |
| } else { |
| this.htEditor.deselectCell(); |
| } |
| }; |
| AutocompleteEditor.sortByRelevance = function(value, choices, caseSensitive) { |
| var choicesRelevance = []; |
| var currentItem; |
| var valueLength = value.length; |
| var valueIndex; |
| var charsLeft; |
| var result = []; |
| var i; |
| var choicesCount = choices.length; |
| if (valueLength === 0) { |
| for (i = 0; i < choicesCount; i++) { |
| result.push(i); |
| } |
| return result; |
| } |
| for (i = 0; i < choicesCount; i++) { |
| currentItem = stringify(choices[i]); |
| if (caseSensitive) { |
| valueIndex = currentItem.indexOf(value); |
| } else { |
| valueIndex = currentItem.toLowerCase().indexOf(value.toLowerCase()); |
| } |
| if (valueIndex == -1) { |
| continue; |
| } |
| charsLeft = currentItem.length - valueIndex - valueLength; |
| choicesRelevance.push({ |
| baseIndex: i, |
| index: valueIndex, |
| charsLeft: charsLeft, |
| value: currentItem |
| }); |
| } |
| choicesRelevance.sort(function(a, b) { |
| if (b.index === -1) { |
| return -1; |
| } |
| if (a.index === -1) { |
| return 1; |
| } |
| if (a.index < b.index) { |
| return -1; |
| } else if (b.index < a.index) { |
| return 1; |
| } else if (a.index === b.index) { |
| if (a.charsLeft < b.charsLeft) { |
| return -1; |
| } else if (a.charsLeft > b.charsLeft) { |
| return 1; |
| } else { |
| return 0; |
| } |
| } |
| }); |
| for (i = 0, choicesCount = choicesRelevance.length; i < choicesCount; i++) { |
| result.push(choicesRelevance[i].baseIndex); |
| } |
| return result; |
| }; |
| AutocompleteEditor.prototype.getDropdownHeight = function() { |
| var firstRowHeight = this.htEditor.getInstance().getRowHeight(0) || 23; |
| var visibleRows = this.cellProperties.visibleRows; |
| return this.choices.length >= visibleRows ? visibleRows * firstRowHeight : this.choices.length * firstRowHeight + 8; |
| }; |
| AutocompleteEditor.prototype.allowKeyEventPropagation = function(keyCode) { |
| var selected = {row: this.htEditor.getSelectedRange() ? this.htEditor.getSelectedRange().from.row : -1}; |
| var allowed = false; |
| if (keyCode === KEY_CODES.ARROW_DOWN && selected.row > 0 && selected.row < this.htEditor.countRows() - 1) { |
| allowed = true; |
| } |
| if (keyCode === KEY_CODES.ARROW_UP && selected.row > -1) { |
| allowed = true; |
| } |
| return allowed; |
| }; |
| ; |
| registerEditor('autocomplete', AutocompleteEditor); |
| |
| //# |
| },{"browser":24,"editors":30,"handsontableEditor":36,"helpers/array":43,"helpers/dom/element":47,"helpers/mixed":51,"helpers/unicode":56}],33:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| CheckboxEditor: {get: function() { |
| return CheckboxEditor; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_editors__, |
| $___95_baseEditor__, |
| $___46__46__47_helpers_47_dom_47_element__; |
| var registerEditor = ($___46__46__47_editors__ = _dereq_("editors"), $___46__46__47_editors__ && $___46__46__47_editors__.__esModule && $___46__46__47_editors__ || {default: $___46__46__47_editors__}).registerEditor; |
| var BaseEditor = ($___95_baseEditor__ = _dereq_("_baseEditor"), $___95_baseEditor__ && $___95_baseEditor__.__esModule && $___95_baseEditor__ || {default: $___95_baseEditor__}).BaseEditor; |
| var hasClass = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}).hasClass; |
| var CheckboxEditor = function CheckboxEditor() { |
| $traceurRuntime.superConstructor($CheckboxEditor).apply(this, arguments); |
| }; |
| var $CheckboxEditor = CheckboxEditor; |
| ($traceurRuntime.createClass)(CheckboxEditor, { |
| beginEditing: function(initialValue, event) { |
| if (event === void 0) { |
| var checkbox = this.TD.querySelector('input[type="checkbox"]'); |
| if (!hasClass(checkbox, 'htBadValue')) { |
| checkbox.click(); |
| } |
| } |
| }, |
| finishEditing: function() {}, |
| init: function() {}, |
| open: function() {}, |
| close: function() {}, |
| getValue: function() {}, |
| setValue: function() {}, |
| focus: function() {} |
| }, {}, BaseEditor); |
| ; |
| registerEditor('checkbox', CheckboxEditor); |
| |
| //# |
| },{"_baseEditor":31,"editors":30,"helpers/dom/element":47}],34:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| DateEditor: {get: function() { |
| return DateEditor; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $___46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47_helpers_47_object__, |
| $___46__46__47_eventManager__, |
| $___46__46__47_editors__, |
| $___46__46__47_helpers_47_unicode__, |
| $___46__46__47_helpers_47_dom_47_event__, |
| $__textEditor__, |
| $__moment__, |
| $__pikaday__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__1.addClass, |
| outerHeight = $__1.outerHeight; |
| var deepExtend = ($___46__46__47_helpers_47_object__ = _dereq_("helpers/object"), $___46__46__47_helpers_47_object__ && $___46__46__47_helpers_47_object__.__esModule && $___46__46__47_helpers_47_object__ || {default: $___46__46__47_helpers_47_object__}).deepExtend; |
| var EventManager = ($___46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47_eventManager__ && $___46__46__47_eventManager__.__esModule && $___46__46__47_eventManager__ || {default: $___46__46__47_eventManager__}).EventManager; |
| var $__4 = ($___46__46__47_editors__ = _dereq_("editors"), $___46__46__47_editors__ && $___46__46__47_editors__.__esModule && $___46__46__47_editors__ || {default: $___46__46__47_editors__}), |
| getEditor = $__4.getEditor, |
| registerEditor = $__4.registerEditor; |
| var isMetaKey = ($___46__46__47_helpers_47_unicode__ = _dereq_("helpers/unicode"), $___46__46__47_helpers_47_unicode__ && $___46__46__47_helpers_47_unicode__.__esModule && $___46__46__47_helpers_47_unicode__ || {default: $___46__46__47_helpers_47_unicode__}).isMetaKey; |
| var stopPropagation = ($___46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47_helpers_47_dom_47_event__ && $___46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47_helpers_47_dom_47_event__}).stopPropagation; |
| var TextEditor = ($__textEditor__ = _dereq_("textEditor"), $__textEditor__ && $__textEditor__.__esModule && $__textEditor__ || {default: $__textEditor__}).TextEditor; |
| var moment = ($__moment__ = _dereq_("moment"), $__moment__ && $__moment__.__esModule && $__moment__ || {default: $__moment__}).default; |
| var Pikaday = ($__pikaday__ = _dereq_("pikaday"), $__pikaday__ && $__pikaday__.__esModule && $__pikaday__ || {default: $__pikaday__}).default; |
| Handsontable.editors = Handsontable.editors || {}; |
| Handsontable.editors.DateEditor = DateEditor; |
| var DateEditor = function DateEditor(hotInstance) { |
| this.$datePicker = null; |
| this.datePicker = null; |
| this.datePickerStyle = null; |
| this.defaultDateFormat = 'DD/MM/YYYY'; |
| this.isCellEdited = false; |
| this.parentDestroyed = false; |
| $traceurRuntime.superConstructor($DateEditor).call(this, hotInstance); |
| }; |
| var $DateEditor = DateEditor; |
| ($traceurRuntime.createClass)(DateEditor, { |
| init: function() { |
| var $__10 = this; |
| if (typeof moment !== 'function') { |
| throw new Error('You need to include moment.js to your project.'); |
| } |
| if (typeof Pikaday !== 'function') { |
| throw new Error('You need to include Pikaday to your project.'); |
| } |
| $traceurRuntime.superGet(this, $DateEditor.prototype, "init").call(this); |
| this.instance.addHook('afterDestroy', (function() { |
| $__10.parentDestroyed = true; |
| $__10.destroyElements(); |
| })); |
| }, |
| createElements: function() { |
| $traceurRuntime.superGet(this, $DateEditor.prototype, "createElements").call(this); |
| this.datePicker = document.createElement('DIV'); |
| this.datePickerStyle = this.datePicker.style; |
| this.datePickerStyle.position = 'absolute'; |
| this.datePickerStyle.top = 0; |
| this.datePickerStyle.left = 0; |
| this.datePickerStyle.zIndex = 9999; |
| addClass(this.datePicker, 'htDatepickerHolder'); |
| document.body.appendChild(this.datePicker); |
| this.$datePicker = new Pikaday(this.getDatePickerConfig()); |
| var eventManager = new EventManager(this); |
| eventManager.addEventListener(this.datePicker, 'mousedown', (function(event) { |
| return stopPropagation(event); |
| })); |
| this.hideDatepicker(); |
| }, |
| destroyElements: function() { |
| this.$datePicker.destroy(); |
| }, |
| prepare: function(row, col, prop, td, originalValue, cellProperties) { |
| this._opened = false; |
| $traceurRuntime.superGet(this, $DateEditor.prototype, "prepare").call(this, row, col, prop, td, originalValue, cellProperties); |
| }, |
| open: function() { |
| var event = arguments[0] !== (void 0) ? arguments[0] : null; |
| $traceurRuntime.superGet(this, $DateEditor.prototype, "open").call(this); |
| this.showDatepicker(event); |
| }, |
| close: function() { |
| var $__10 = this; |
| this._opened = false; |
| this.instance._registerTimeout(setTimeout((function() { |
| $__10.instance.selection.refreshBorders(); |
| }), 0)); |
| $traceurRuntime.superGet(this, $DateEditor.prototype, "close").call(this); |
| }, |
| finishEditing: function() { |
| var isCancelled = arguments[0] !== (void 0) ? arguments[0] : false; |
| var ctrlDown = arguments[1] !== (void 0) ? arguments[1] : false; |
| if (isCancelled) { |
| var value = this.originalValue; |
| if (value !== void 0) { |
| this.setValue(value); |
| } |
| } |
| this.hideDatepicker(); |
| $traceurRuntime.superGet(this, $DateEditor.prototype, "finishEditing").call(this, isCancelled, ctrlDown); |
| }, |
| showDatepicker: function(event) { |
| this.$datePicker.config(this.getDatePickerConfig()); |
| var offset = this.TD.getBoundingClientRect(); |
| var dateFormat = this.cellProperties.dateFormat || this.defaultDateFormat; |
| var datePickerConfig = this.$datePicker.config(); |
| var dateStr; |
| var isMouseDown = this.instance.view.isMouseDown(); |
| var isMeta = event ? isMetaKey(event.keyCode) : false; |
| this.datePickerStyle.top = (window.pageYOffset + offset.top + outerHeight(this.TD)) + 'px'; |
| this.datePickerStyle.left = (window.pageXOffset + offset.left) + 'px'; |
| this.$datePicker._onInputFocus = function() {}; |
| datePickerConfig.format = dateFormat; |
| if (this.originalValue) { |
| dateStr = this.originalValue; |
| if (moment(dateStr, dateFormat, true).isValid()) { |
| this.$datePicker.setMoment(moment(dateStr, dateFormat), true); |
| } |
| if (this.getValue() !== this.originalValue) { |
| this.setValue(this.originalValue); |
| } |
| if (!isMeta && !isMouseDown) { |
| this.setValue(''); |
| } |
| } else { |
| if (this.cellProperties.defaultDate) { |
| dateStr = this.cellProperties.defaultDate; |
| datePickerConfig.defaultDate = dateStr; |
| if (moment(dateStr, dateFormat, true).isValid()) { |
| this.$datePicker.setMoment(moment(dateStr, dateFormat), true); |
| } |
| if (!isMeta && !isMouseDown) { |
| this.setValue(''); |
| } |
| } else { |
| this.$datePicker.gotoToday(); |
| } |
| } |
| this.datePickerStyle.display = 'block'; |
| this.$datePicker.show(); |
| }, |
| hideDatepicker: function() { |
| this.datePickerStyle.display = 'none'; |
| this.$datePicker.hide(); |
| }, |
| getDatePickerConfig: function() { |
| var $__10 = this; |
| var htInput = this.TEXTAREA; |
| var options = {}; |
| if (this.cellProperties && this.cellProperties.datePickerConfig) { |
| deepExtend(options, this.cellProperties.datePickerConfig); |
| } |
| var origOnSelect = options.onSelect; |
| var origOnClose = options.onClose; |
| options.field = htInput; |
| options.trigger = htInput; |
| options.container = this.datePicker; |
| options.bound = false; |
| options.format = options.format || this.defaultDateFormat; |
| options.reposition = options.reposition || false; |
| options.onSelect = (function(dateStr) { |
| if (!isNaN(dateStr.getTime())) { |
| dateStr = moment(dateStr).format($__10.cellProperties.dateFormat || $__10.defaultDateFormat); |
| } |
| $__10.setValue(dateStr); |
| $__10.hideDatepicker(); |
| if (origOnSelect) { |
| origOnSelect(); |
| } |
| }); |
| options.onClose = (function() { |
| if (!$__10.parentDestroyed) { |
| $__10.finishEditing(false); |
| } |
| if (origOnClose) { |
| origOnClose(); |
| } |
| }); |
| return options; |
| } |
| }, {}, TextEditor); |
| ; |
| registerEditor('date', DateEditor); |
| |
| //# |
| },{"browser":24,"editors":30,"eventManager":42,"helpers/dom/element":47,"helpers/dom/event":48,"helpers/object":53,"helpers/unicode":56,"moment":"moment","pikaday":"pikaday","textEditor":41}],35:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| DropdownEditor: {get: function() { |
| return DropdownEditor; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $___46__46__47_editors__, |
| $__autocompleteEditor__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47_editors__ = _dereq_("editors"), $___46__46__47_editors__ && $___46__46__47_editors__.__esModule && $___46__46__47_editors__ || {default: $___46__46__47_editors__}), |
| getEditor = $__1.getEditor, |
| registerEditor = $__1.registerEditor, |
| getEditorConstructor = $__1.getEditorConstructor; |
| var AutocompleteEditor = ($__autocompleteEditor__ = _dereq_("autocompleteEditor"), $__autocompleteEditor__ && $__autocompleteEditor__.__esModule && $__autocompleteEditor__ || {default: $__autocompleteEditor__}).AutocompleteEditor; |
| var DropdownEditor = function DropdownEditor() { |
| $traceurRuntime.superConstructor($DropdownEditor).apply(this, arguments); |
| }; |
| var $DropdownEditor = DropdownEditor; |
| ($traceurRuntime.createClass)(DropdownEditor, {prepare: function(row, col, prop, td, originalValue, cellProperties) { |
| $traceurRuntime.superGet(this, $DropdownEditor.prototype, "prepare").call(this, row, col, prop, td, originalValue, cellProperties); |
| this.cellProperties.filter = false; |
| this.cellProperties.strict = true; |
| }}, {}, AutocompleteEditor); |
| Handsontable.hooks.add('beforeValidate', function(value, row, col, source) { |
| var cellMeta = this.getCellMeta(row, this.propToCol(col)); |
| if (cellMeta.editor === Handsontable.editors.DropdownEditor) { |
| if (cellMeta.strict === void 0) { |
| cellMeta.filter = false; |
| cellMeta.strict = true; |
| } |
| } |
| }); |
| ; |
| registerEditor('dropdown', DropdownEditor); |
| |
| //# |
| },{"autocompleteEditor":32,"browser":24,"editors":30}],36:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| HandsontableEditor: {get: function() { |
| return HandsontableEditor; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $___46__46__47_helpers_47_unicode__, |
| $___46__46__47_helpers_47_object__, |
| $___46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47_helpers_47_dom_47_event__, |
| $___46__46__47_editors__, |
| $__textEditor__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var KEY_CODES = ($___46__46__47_helpers_47_unicode__ = _dereq_("helpers/unicode"), $___46__46__47_helpers_47_unicode__ && $___46__46__47_helpers_47_unicode__.__esModule && $___46__46__47_helpers_47_unicode__ || {default: $___46__46__47_helpers_47_unicode__}).KEY_CODES; |
| var extend = ($___46__46__47_helpers_47_object__ = _dereq_("helpers/object"), $___46__46__47_helpers_47_object__ && $___46__46__47_helpers_47_object__.__esModule && $___46__46__47_helpers_47_object__ || {default: $___46__46__47_helpers_47_object__}).extend; |
| var setCaretPosition = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}).setCaretPosition; |
| var $__4 = ($___46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47_helpers_47_dom_47_event__ && $___46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47_helpers_47_dom_47_event__}), |
| stopImmediatePropagation = $__4.stopImmediatePropagation, |
| isImmediatePropagationStopped = $__4.isImmediatePropagationStopped; |
| var $__5 = ($___46__46__47_editors__ = _dereq_("editors"), $___46__46__47_editors__ && $___46__46__47_editors__.__esModule && $___46__46__47_editors__ || {default: $___46__46__47_editors__}), |
| getEditor = $__5.getEditor, |
| registerEditor = $__5.registerEditor; |
| var TextEditor = ($__textEditor__ = _dereq_("textEditor"), $__textEditor__ && $__textEditor__.__esModule && $__textEditor__ || {default: $__textEditor__}).TextEditor; |
| var HandsontableEditor = TextEditor.prototype.extend(); |
| HandsontableEditor.prototype.createElements = function() { |
| TextEditor.prototype.createElements.apply(this, arguments); |
| var DIV = document.createElement('DIV'); |
| DIV.className = 'handsontableEditor'; |
| this.TEXTAREA_PARENT.appendChild(DIV); |
| this.htContainer = DIV; |
| this.assignHooks(); |
| }; |
| HandsontableEditor.prototype.prepare = function(td, row, col, prop, value, cellProperties) { |
| TextEditor.prototype.prepare.apply(this, arguments); |
| var parent = this; |
| var options = { |
| startRows: 0, |
| startCols: 0, |
| minRows: 0, |
| minCols: 0, |
| className: 'listbox', |
| copyPaste: false, |
| autoColumnSize: false, |
| autoRowSize: false, |
| readOnly: true, |
| fillHandle: false, |
| afterOnCellMouseDown: function() { |
| var value = this.getValue(); |
| if (value !== void 0) { |
| parent.setValue(value); |
| } |
| parent.instance.destroyEditor(); |
| } |
| }; |
| if (this.cellProperties.handsontable) { |
| extend(options, cellProperties.handsontable); |
| } |
| this.htOptions = options; |
| }; |
| var onBeforeKeyDown = function(event) { |
| if (isImmediatePropagationStopped(event)) { |
| return; |
| } |
| var editor = this.getActiveEditor(); |
| var innerHOT = editor.htEditor.getInstance(); |
| var rowToSelect; |
| if (event.keyCode == KEY_CODES.ARROW_DOWN) { |
| if (!innerHOT.getSelected() && !innerHOT.flipped) { |
| rowToSelect = 0; |
| } else if (innerHOT.getSelected()) { |
| if (innerHOT.flipped) { |
| rowToSelect = innerHOT.getSelected()[0] + 1; |
| } else if (!innerHOT.flipped) { |
| var selectedRow = innerHOT.getSelected()[0]; |
| var lastRow = innerHOT.countRows() - 1; |
| rowToSelect = Math.min(lastRow, selectedRow + 1); |
| } |
| } |
| } else if (event.keyCode == KEY_CODES.ARROW_UP) { |
| if (!innerHOT.getSelected() && innerHOT.flipped) { |
| rowToSelect = innerHOT.countRows() - 1; |
| } else if (innerHOT.getSelected()) { |
| if (innerHOT.flipped) { |
| var selectedRow = innerHOT.getSelected()[0]; |
| rowToSelect = Math.max(0, selectedRow - 1); |
| } else { |
| var selectedRow = innerHOT.getSelected()[0]; |
| rowToSelect = selectedRow - 1; |
| } |
| } |
| } |
| if (rowToSelect !== void 0) { |
| if (rowToSelect < 0 || (innerHOT.flipped && rowToSelect > innerHOT.countRows() - 1)) { |
| innerHOT.deselectCell(); |
| } else { |
| innerHOT.selectCell(rowToSelect, 0); |
| } |
| if (innerHOT.getData().length) { |
| event.preventDefault(); |
| stopImmediatePropagation(event); |
| editor.instance.listen(); |
| editor.TEXTAREA.focus(); |
| } |
| } |
| }; |
| HandsontableEditor.prototype.open = function() { |
| this.instance.addHook('beforeKeyDown', onBeforeKeyDown); |
| TextEditor.prototype.open.apply(this, arguments); |
| if (this.htEditor) { |
| this.htEditor.destroy(); |
| } |
| this.htEditor = new Handsontable(this.htContainer, this.htOptions); |
| if (this.cellProperties.strict) { |
| this.htEditor.selectCell(0, 0); |
| this.TEXTAREA.style.visibility = 'hidden'; |
| } else { |
| this.htEditor.deselectCell(); |
| this.TEXTAREA.style.visibility = 'visible'; |
| } |
| setCaretPosition(this.TEXTAREA, 0, this.TEXTAREA.value.length); |
| }; |
| HandsontableEditor.prototype.close = function() { |
| this.instance.removeHook('beforeKeyDown', onBeforeKeyDown); |
| this.instance.listen(); |
| TextEditor.prototype.close.apply(this, arguments); |
| }; |
| HandsontableEditor.prototype.focus = function() { |
| this.instance.listen(); |
| TextEditor.prototype.focus.apply(this, arguments); |
| }; |
| HandsontableEditor.prototype.beginEditing = function(initialValue) { |
| var onBeginEditing = this.instance.getSettings().onBeginEditing; |
| if (onBeginEditing && onBeginEditing() === false) { |
| return; |
| } |
| TextEditor.prototype.beginEditing.apply(this, arguments); |
| }; |
| HandsontableEditor.prototype.finishEditing = function(isCancelled, ctrlDown) { |
| if (this.htEditor && this.htEditor.isListening()) { |
| this.instance.listen(); |
| } |
| if (this.htEditor && this.htEditor.getSelected()) { |
| var value = this.htEditor.getInstance().getValue(); |
| if (value !== void 0) { |
| this.setValue(value); |
| } |
| } |
| return TextEditor.prototype.finishEditing.apply(this, arguments); |
| }; |
| HandsontableEditor.prototype.assignHooks = function() { |
| var _this = this; |
| this.instance.addHook('afterDestroy', function() { |
| if (_this.htEditor) { |
| _this.htEditor.destroy(); |
| } |
| }); |
| }; |
| ; |
| registerEditor('handsontable', HandsontableEditor); |
| |
| //# |
| },{"browser":24,"editors":30,"helpers/dom/element":47,"helpers/dom/event":48,"helpers/object":53,"helpers/unicode":56,"textEditor":41}],37:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| MobileTextEditor: {get: function() { |
| return MobileTextEditor; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $___46__46__47_helpers_47_unicode__, |
| $___46__46__47_helpers_47_dom_47_event__, |
| $___46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47_editors__, |
| $___95_baseEditor__, |
| $___46__46__47_eventManager__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var KEY_CODES = ($___46__46__47_helpers_47_unicode__ = _dereq_("helpers/unicode"), $___46__46__47_helpers_47_unicode__ && $___46__46__47_helpers_47_unicode__.__esModule && $___46__46__47_helpers_47_unicode__ || {default: $___46__46__47_helpers_47_unicode__}).KEY_CODES; |
| var $__2 = ($___46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47_helpers_47_dom_47_event__ && $___46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47_helpers_47_dom_47_event__}), |
| stopImmediatePropagation = $__2.stopImmediatePropagation, |
| isImmediatePropagationStopped = $__2.isImmediatePropagationStopped; |
| var $__3 = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__3.addClass, |
| getScrollLeft = $__3.getScrollLeft, |
| getScrollTop = $__3.getScrollTop, |
| hasClass = $__3.hasClass, |
| isChildOf = $__3.isChildOf, |
| offset = $__3.offset, |
| outerHeight = $__3.outerHeight, |
| outerWidth = $__3.outerWidth, |
| removeClass = $__3.removeClass, |
| setCaretPosition = $__3.setCaretPosition; |
| var $__4 = ($___46__46__47_editors__ = _dereq_("editors"), $___46__46__47_editors__ && $___46__46__47_editors__.__esModule && $___46__46__47_editors__ || {default: $___46__46__47_editors__}), |
| getEditor = $__4.getEditor, |
| registerEditor = $__4.registerEditor; |
| var BaseEditor = ($___95_baseEditor__ = _dereq_("_baseEditor"), $___95_baseEditor__ && $___95_baseEditor__.__esModule && $___95_baseEditor__ || {default: $___95_baseEditor__}).BaseEditor; |
| var eventManagerObject = ($___46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47_eventManager__ && $___46__46__47_eventManager__.__esModule && $___46__46__47_eventManager__ || {default: $___46__46__47_eventManager__}).eventManager; |
| var MobileTextEditor = BaseEditor.prototype.extend(), |
| domDimensionsCache = {}; |
| var createControls = function() { |
| this.controls = {}; |
| this.controls.leftButton = document.createElement('DIV'); |
| this.controls.leftButton.className = 'leftButton'; |
| this.controls.rightButton = document.createElement('DIV'); |
| this.controls.rightButton.className = 'rightButton'; |
| this.controls.upButton = document.createElement('DIV'); |
| this.controls.upButton.className = 'upButton'; |
| this.controls.downButton = document.createElement('DIV'); |
| this.controls.downButton.className = 'downButton'; |
| for (var button in this.controls) { |
| if (this.controls.hasOwnProperty(button)) { |
| this.positionControls.appendChild(this.controls[button]); |
| } |
| } |
| }; |
| MobileTextEditor.prototype.valueChanged = function() { |
| return this.initValue != this.getValue(); |
| }; |
| MobileTextEditor.prototype.init = function() { |
| var that = this; |
| this.eventManager = eventManagerObject(this.instance); |
| this.createElements(); |
| this.bindEvents(); |
| this.instance.addHook('afterDestroy', function() { |
| that.destroy(); |
| }); |
| }; |
| MobileTextEditor.prototype.getValue = function() { |
| return this.TEXTAREA.value; |
| }; |
| MobileTextEditor.prototype.setValue = function(newValue) { |
| this.initValue = newValue; |
| this.TEXTAREA.value = newValue; |
| }; |
| MobileTextEditor.prototype.createElements = function() { |
| this.editorContainer = document.createElement('DIV'); |
| this.editorContainer.className = 'htMobileEditorContainer'; |
| this.cellPointer = document.createElement('DIV'); |
| this.cellPointer.className = 'cellPointer'; |
| this.moveHandle = document.createElement('DIV'); |
| this.moveHandle.className = 'moveHandle'; |
| this.inputPane = document.createElement('DIV'); |
| this.inputPane.className = 'inputs'; |
| this.positionControls = document.createElement('DIV'); |
| this.positionControls.className = 'positionControls'; |
| this.TEXTAREA = document.createElement('TEXTAREA'); |
| addClass(this.TEXTAREA, 'handsontableInput'); |
| this.inputPane.appendChild(this.TEXTAREA); |
| this.editorContainer.appendChild(this.cellPointer); |
| this.editorContainer.appendChild(this.moveHandle); |
| this.editorContainer.appendChild(this.inputPane); |
| this.editorContainer.appendChild(this.positionControls); |
| createControls.call(this); |
| document.body.appendChild(this.editorContainer); |
| }; |
| MobileTextEditor.prototype.onBeforeKeyDown = function(event) { |
| var instance = this; |
| var that = instance.getActiveEditor(); |
| if (event.target !== that.TEXTAREA || isImmediatePropagationStopped(event)) { |
| return; |
| } |
| switch (event.keyCode) { |
| case KEY_CODES.ENTER: |
| that.close(); |
| event.preventDefault(); |
| break; |
| case KEY_CODES.BACKSPACE: |
| stopImmediatePropagation(event); |
| break; |
| } |
| }; |
| MobileTextEditor.prototype.open = function() { |
| this.instance.addHook('beforeKeyDown', this.onBeforeKeyDown); |
| addClass(this.editorContainer, 'active'); |
| removeClass(this.cellPointer, 'hidden'); |
| this.updateEditorPosition(); |
| }; |
| MobileTextEditor.prototype.focus = function() { |
| this.TEXTAREA.focus(); |
| setCaretPosition(this.TEXTAREA, this.TEXTAREA.value.length); |
| }; |
| MobileTextEditor.prototype.close = function() { |
| this.TEXTAREA.blur(); |
| this.instance.removeHook('beforeKeyDown', this.onBeforeKeyDown); |
| removeClass(this.editorContainer, 'active'); |
| }; |
| MobileTextEditor.prototype.scrollToView = function() { |
| var coords = this.instance.getSelectedRange().highlight; |
| this.instance.view.scrollViewport(coords); |
| }; |
| MobileTextEditor.prototype.hideCellPointer = function() { |
| if (!hasClass(this.cellPointer, 'hidden')) { |
| addClass(this.cellPointer, 'hidden'); |
| } |
| }; |
| MobileTextEditor.prototype.updateEditorPosition = function(x, y) { |
| if (x && y) { |
| x = parseInt(x, 10); |
| y = parseInt(y, 10); |
| this.editorContainer.style.top = y + 'px'; |
| this.editorContainer.style.left = x + 'px'; |
| } else { |
| var selection = this.instance.getSelected(), |
| selectedCell = this.instance.getCell(selection[0], selection[1]); |
| if (!domDimensionsCache.cellPointer) { |
| domDimensionsCache.cellPointer = { |
| height: outerHeight(this.cellPointer), |
| width: outerWidth(this.cellPointer) |
| }; |
| } |
| if (!domDimensionsCache.editorContainer) { |
| domDimensionsCache.editorContainer = {width: outerWidth(this.editorContainer)}; |
| } |
| if (selectedCell !== undefined) { |
| var scrollLeft = this.instance.view.wt.wtOverlays.leftOverlay.trimmingContainer == window ? 0 : getScrollLeft(this.instance.view.wt.wtOverlays.leftOverlay.holder); |
| var scrollTop = this.instance.view.wt.wtOverlays.topOverlay.trimmingContainer == window ? 0 : getScrollTop(this.instance.view.wt.wtOverlays.topOverlay.holder); |
| var selectedCellOffset = offset(selectedCell), |
| selectedCellWidth = outerWidth(selectedCell), |
| currentScrollPosition = { |
| x: scrollLeft, |
| y: scrollTop |
| }; |
| this.editorContainer.style.top = parseInt(selectedCellOffset.top + outerHeight(selectedCell) - currentScrollPosition.y + domDimensionsCache.cellPointer.height, 10) + 'px'; |
| this.editorContainer.style.left = parseInt((window.innerWidth / 2) - (domDimensionsCache.editorContainer.width / 2), 10) + 'px'; |
| if (selectedCellOffset.left + selectedCellWidth / 2 > parseInt(this.editorContainer.style.left, 10) + domDimensionsCache.editorContainer.width) { |
| this.editorContainer.style.left = window.innerWidth - domDimensionsCache.editorContainer.width + 'px'; |
| } else if (selectedCellOffset.left + selectedCellWidth / 2 < parseInt(this.editorContainer.style.left, 10) + 20) { |
| this.editorContainer.style.left = 0 + 'px'; |
| } |
| this.cellPointer.style.left = parseInt(selectedCellOffset.left - (domDimensionsCache.cellPointer.width / 2) - offset(this.editorContainer).left + (selectedCellWidth / 2) - currentScrollPosition.x, 10) + 'px'; |
| } |
| } |
| }; |
| MobileTextEditor.prototype.updateEditorData = function() { |
| var selected = this.instance.getSelected(), |
| selectedValue = this.instance.getDataAtCell(selected[0], selected[1]); |
| this.row = selected[0]; |
| this.col = selected[1]; |
| this.setValue(selectedValue); |
| this.updateEditorPosition(); |
| }; |
| MobileTextEditor.prototype.prepareAndSave = function() { |
| var val; |
| if (!this.valueChanged()) { |
| return true; |
| } |
| if (this.instance.getSettings().trimWhitespace) { |
| val = [[String.prototype.trim.call(this.getValue())]]; |
| } else { |
| val = [[this.getValue()]]; |
| } |
| this.saveValue(val); |
| }; |
| MobileTextEditor.prototype.bindEvents = function() { |
| var that = this; |
| this.eventManager.addEventListener(this.controls.leftButton, 'touchend', function(event) { |
| that.prepareAndSave(); |
| that.instance.selection.transformStart(0, -1, null, true); |
| that.updateEditorData(); |
| event.preventDefault(); |
| }); |
| this.eventManager.addEventListener(this.controls.rightButton, 'touchend', function(event) { |
| that.prepareAndSave(); |
| that.instance.selection.transformStart(0, 1, null, true); |
| that.updateEditorData(); |
| event.preventDefault(); |
| }); |
| this.eventManager.addEventListener(this.controls.upButton, 'touchend', function(event) { |
| that.prepareAndSave(); |
| that.instance.selection.transformStart(-1, 0, null, true); |
| that.updateEditorData(); |
| event.preventDefault(); |
| }); |
| this.eventManager.addEventListener(this.controls.downButton, 'touchend', function(event) { |
| that.prepareAndSave(); |
| that.instance.selection.transformStart(1, 0, null, true); |
| that.updateEditorData(); |
| event.preventDefault(); |
| }); |
| this.eventManager.addEventListener(this.moveHandle, 'touchstart', function(event) { |
| if (event.touches.length == 1) { |
| var touch = event.touches[0], |
| onTouchPosition = { |
| x: that.editorContainer.offsetLeft, |
| y: that.editorContainer.offsetTop |
| }, |
| onTouchOffset = { |
| x: touch.pageX - onTouchPosition.x, |
| y: touch.pageY - onTouchPosition.y |
| }; |
| that.eventManager.addEventListener(this, 'touchmove', function(event) { |
| var touch = event.touches[0]; |
| that.updateEditorPosition(touch.pageX - onTouchOffset.x, touch.pageY - onTouchOffset.y); |
| that.hideCellPointer(); |
| event.preventDefault(); |
| }); |
| } |
| }); |
| this.eventManager.addEventListener(document.body, 'touchend', function(event) { |
| if (!isChildOf(event.target, that.editorContainer) && !isChildOf(event.target, that.instance.rootElement)) { |
| that.close(); |
| } |
| }); |
| this.eventManager.addEventListener(this.instance.view.wt.wtOverlays.leftOverlay.holder, 'scroll', function(event) { |
| if (that.instance.view.wt.wtOverlays.leftOverlay.trimmingContainer != window) { |
| that.hideCellPointer(); |
| } |
| }); |
| this.eventManager.addEventListener(this.instance.view.wt.wtOverlays.topOverlay.holder, 'scroll', function(event) { |
| if (that.instance.view.wt.wtOverlays.topOverlay.trimmingContainer != window) { |
| that.hideCellPointer(); |
| } |
| }); |
| }; |
| MobileTextEditor.prototype.destroy = function() { |
| this.eventManager.clear(); |
| this.editorContainer.parentNode.removeChild(this.editorContainer); |
| }; |
| ; |
| registerEditor('mobile', MobileTextEditor); |
| |
| //# |
| },{"_baseEditor":31,"browser":24,"editors":30,"eventManager":42,"helpers/dom/element":47,"helpers/dom/event":48,"helpers/unicode":56}],38:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| NumericEditor: {get: function() { |
| return NumericEditor; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__numbro__, |
| $___46__46__47_editors__, |
| $__textEditor__; |
| var numbro = ($__numbro__ = _dereq_("numbro"), $__numbro__ && $__numbro__.__esModule && $__numbro__ || {default: $__numbro__}).default; |
| var registerEditor = ($___46__46__47_editors__ = _dereq_("editors"), $___46__46__47_editors__ && $___46__46__47_editors__.__esModule && $___46__46__47_editors__ || {default: $___46__46__47_editors__}).registerEditor; |
| var TextEditor = ($__textEditor__ = _dereq_("textEditor"), $__textEditor__ && $__textEditor__.__esModule && $__textEditor__ || {default: $__textEditor__}).TextEditor; |
| var NumericEditor = function NumericEditor() { |
| $traceurRuntime.superConstructor($NumericEditor).apply(this, arguments); |
| }; |
| var $NumericEditor = NumericEditor; |
| ($traceurRuntime.createClass)(NumericEditor, {beginEditing: function(initialValue) { |
| if (typeof initialValue === 'undefined' && this.originalValue) { |
| if (typeof this.cellProperties.language !== 'undefined') { |
| numbro.culture(this.cellProperties.language); |
| } |
| var decimalDelimiter = numbro.cultureData().delimiters.decimal; |
| initialValue = ('' + this.originalValue).replace('.', decimalDelimiter); |
| } |
| $traceurRuntime.superGet(this, $NumericEditor.prototype, "beginEditing").call(this, initialValue); |
| }}, {}, TextEditor); |
| ; |
| registerEditor('numeric', NumericEditor); |
| |
| //# |
| },{"editors":30,"numbro":"numbro","textEditor":41}],39:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| PasswordEditor: {get: function() { |
| return PasswordEditor; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $___46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47_editors__, |
| $__textEditor__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var empty = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}).empty; |
| var $__2 = ($___46__46__47_editors__ = _dereq_("editors"), $___46__46__47_editors__ && $___46__46__47_editors__.__esModule && $___46__46__47_editors__ || {default: $___46__46__47_editors__}), |
| getEditor = $__2.getEditor, |
| registerEditor = $__2.registerEditor; |
| var TextEditor = ($__textEditor__ = _dereq_("textEditor"), $__textEditor__ && $__textEditor__.__esModule && $__textEditor__ || {default: $__textEditor__}).TextEditor; |
| var PasswordEditor = function PasswordEditor() { |
| $traceurRuntime.superConstructor($PasswordEditor).apply(this, arguments); |
| }; |
| var $PasswordEditor = PasswordEditor; |
| ($traceurRuntime.createClass)(PasswordEditor, {createElements: function() { |
| $traceurRuntime.superGet(this, $PasswordEditor.prototype, "createElements").call(this); |
| this.TEXTAREA = document.createElement('input'); |
| this.TEXTAREA.setAttribute('type', 'password'); |
| this.TEXTAREA.className = 'handsontableInput'; |
| this.textareaStyle = this.TEXTAREA.style; |
| this.textareaStyle.width = 0; |
| this.textareaStyle.height = 0; |
| empty(this.TEXTAREA_PARENT); |
| this.TEXTAREA_PARENT.appendChild(this.TEXTAREA); |
| }}, {}, TextEditor); |
| ; |
| registerEditor('password', PasswordEditor); |
| |
| //# |
| },{"browser":24,"editors":30,"helpers/dom/element":47,"textEditor":41}],40:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| SelectEditor: {get: function() { |
| return SelectEditor; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $___46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47_helpers_47_dom_47_event__, |
| $___46__46__47_helpers_47_unicode__, |
| $___46__46__47_editors__, |
| $___95_baseEditor__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__1.addClass, |
| empty = $__1.empty, |
| fastInnerHTML = $__1.fastInnerHTML, |
| getComputedStyle = $__1.getComputedStyle, |
| getCssTransform = $__1.getCssTransform, |
| getScrollableElement = $__1.getScrollableElement, |
| offset = $__1.offset, |
| outerHeight = $__1.outerHeight, |
| outerWidth = $__1.outerWidth, |
| resetCssTransform = $__1.resetCssTransform; |
| var stopImmediatePropagation = ($___46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47_helpers_47_dom_47_event__ && $___46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47_helpers_47_dom_47_event__}).stopImmediatePropagation; |
| var KEY_CODES = ($___46__46__47_helpers_47_unicode__ = _dereq_("helpers/unicode"), $___46__46__47_helpers_47_unicode__ && $___46__46__47_helpers_47_unicode__.__esModule && $___46__46__47_helpers_47_unicode__ || {default: $___46__46__47_helpers_47_unicode__}).KEY_CODES; |
| var $__4 = ($___46__46__47_editors__ = _dereq_("editors"), $___46__46__47_editors__ && $___46__46__47_editors__.__esModule && $___46__46__47_editors__ || {default: $___46__46__47_editors__}), |
| getEditor = $__4.getEditor, |
| registerEditor = $__4.registerEditor; |
| var BaseEditor = ($___95_baseEditor__ = _dereq_("_baseEditor"), $___95_baseEditor__ && $___95_baseEditor__.__esModule && $___95_baseEditor__ || {default: $___95_baseEditor__}).BaseEditor; |
| var SelectEditor = BaseEditor.prototype.extend(); |
| SelectEditor.prototype.init = function() { |
| this.select = document.createElement('SELECT'); |
| addClass(this.select, 'htSelectEditor'); |
| this.select.style.display = 'none'; |
| this.instance.rootElement.appendChild(this.select); |
| this.registerHooks(); |
| }; |
| SelectEditor.prototype.registerHooks = function() { |
| var $__6 = this; |
| this.instance.addHook('afterScrollHorizontally', (function() { |
| return $__6.refreshDimensions(); |
| })); |
| this.instance.addHook('afterScrollVertically', (function() { |
| return $__6.refreshDimensions(); |
| })); |
| this.instance.addHook('afterColumnResize', (function() { |
| return $__6.refreshDimensions(); |
| })); |
| this.instance.addHook('afterRowResize', (function() { |
| return $__6.refreshDimensions(); |
| })); |
| }; |
| SelectEditor.prototype.prepare = function() { |
| BaseEditor.prototype.prepare.apply(this, arguments); |
| var selectOptions = this.cellProperties.selectOptions; |
| var options; |
| if (typeof selectOptions == 'function') { |
| options = this.prepareOptions(selectOptions(this.row, this.col, this.prop)); |
| } else { |
| options = this.prepareOptions(selectOptions); |
| } |
| empty(this.select); |
| for (var option in options) { |
| if (options.hasOwnProperty(option)) { |
| var optionElement = document.createElement('OPTION'); |
| optionElement.value = option; |
| fastInnerHTML(optionElement, options[option]); |
| this.select.appendChild(optionElement); |
| } |
| } |
| }; |
| SelectEditor.prototype.prepareOptions = function(optionsToPrepare) { |
| var preparedOptions = {}; |
| if (Array.isArray(optionsToPrepare)) { |
| for (var i = 0, |
| len = optionsToPrepare.length; i < len; i++) { |
| preparedOptions[optionsToPrepare[i]] = optionsToPrepare[i]; |
| } |
| } else if (typeof optionsToPrepare == 'object') { |
| preparedOptions = optionsToPrepare; |
| } |
| return preparedOptions; |
| }; |
| SelectEditor.prototype.getValue = function() { |
| return this.select.value; |
| }; |
| SelectEditor.prototype.setValue = function(value) { |
| this.select.value = value; |
| }; |
| var onBeforeKeyDown = function(event) { |
| var instance = this; |
| var editor = instance.getActiveEditor(); |
| switch (event.keyCode) { |
| case KEY_CODES.ARROW_UP: |
| var previousOptionIndex = editor.select.selectedIndex - 1; |
| if (previousOptionIndex >= 0) { |
| editor.select[previousOptionIndex].selected = true; |
| } |
| stopImmediatePropagation(event); |
| event.preventDefault(); |
| break; |
| case KEY_CODES.ARROW_DOWN: |
| var nextOptionIndex = editor.select.selectedIndex + 1; |
| if (nextOptionIndex <= editor.select.length - 1) { |
| editor.select[nextOptionIndex].selected = true; |
| } |
| stopImmediatePropagation(event); |
| event.preventDefault(); |
| break; |
| } |
| }; |
| SelectEditor.prototype.open = function() { |
| this._opened = true; |
| this.refreshDimensions(); |
| this.select.style.display = ''; |
| this.instance.addHook('beforeKeyDown', onBeforeKeyDown); |
| }; |
| SelectEditor.prototype.close = function() { |
| this._opened = false; |
| this.select.style.display = 'none'; |
| this.instance.removeHook('beforeKeyDown', onBeforeKeyDown); |
| }; |
| SelectEditor.prototype.focus = function() { |
| this.select.focus(); |
| }; |
| SelectEditor.prototype.refreshDimensions = function() { |
| if (this.state !== Handsontable.EditorState.EDITING) { |
| return; |
| } |
| this.TD = this.getEditedCell(); |
| if (!this.TD) { |
| this.close(); |
| return; |
| } |
| var width = outerWidth(this.TD) + 1, |
| height = outerHeight(this.TD) + 1, |
| currentOffset = offset(this.TD), |
| containerOffset = offset(this.instance.rootElement), |
| scrollableContainer = getScrollableElement(this.TD), |
| editTop = currentOffset.top - containerOffset.top - 1 - (scrollableContainer.scrollTop || 0), |
| editLeft = currentOffset.left - containerOffset.left - 1 - (scrollableContainer.scrollLeft || 0), |
| editorSection = this.checkEditorSection(), |
| cssTransformOffset; |
| var settings = this.instance.getSettings(); |
| var rowHeadersCount = settings.rowHeaders ? 1 : 0; |
| var colHeadersCount = settings.colHeaders ? 1 : 0; |
| switch (editorSection) { |
| case 'top': |
| cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.holder.parentNode); |
| break; |
| case 'left': |
| cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.holder.parentNode); |
| break; |
| case 'top-left-corner': |
| cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.holder.parentNode); |
| break; |
| case 'bottom-left-corner': |
| cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.holder.parentNode); |
| break; |
| case 'bottom': |
| cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.bottomOverlay.clone.wtTable.holder.parentNode); |
| break; |
| } |
| if (this.instance.getSelected()[0] === 0) { |
| editTop += 1; |
| } |
| if (this.instance.getSelected()[1] === 0) { |
| editLeft += 1; |
| } |
| var selectStyle = this.select.style; |
| if (cssTransformOffset && cssTransformOffset != -1) { |
| selectStyle[cssTransformOffset[0]] = cssTransformOffset[1]; |
| } else { |
| resetCssTransform(this.select); |
| } |
| var cellComputedStyle = getComputedStyle(this.TD); |
| if (parseInt(cellComputedStyle.borderTopWidth, 10) > 0) { |
| height -= 1; |
| } |
| if (parseInt(cellComputedStyle.borderLeftWidth, 10) > 0) { |
| width -= 1; |
| } |
| selectStyle.height = height + 'px'; |
| selectStyle.minWidth = width + 'px'; |
| selectStyle.top = editTop + 'px'; |
| selectStyle.left = editLeft + 'px'; |
| selectStyle.margin = '0px'; |
| }; |
| SelectEditor.prototype.getEditedCell = function() { |
| var editorSection = this.checkEditorSection(), |
| editedCell; |
| switch (editorSection) { |
| case 'top': |
| editedCell = this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.getCell({ |
| row: this.row, |
| col: this.col |
| }); |
| this.select.style.zIndex = 101; |
| break; |
| case 'corner': |
| editedCell = this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell({ |
| row: this.row, |
| col: this.col |
| }); |
| this.select.style.zIndex = 103; |
| break; |
| case 'left': |
| editedCell = this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.getCell({ |
| row: this.row, |
| col: this.col |
| }); |
| this.select.style.zIndex = 102; |
| break; |
| default: |
| editedCell = this.instance.getCell(this.row, this.col); |
| this.select.style.zIndex = ''; |
| break; |
| } |
| return editedCell != -1 && editedCell != -2 ? editedCell : void 0; |
| }; |
| ; |
| registerEditor('select', SelectEditor); |
| |
| //# |
| },{"_baseEditor":31,"browser":24,"editors":30,"helpers/dom/element":47,"helpers/dom/event":48,"helpers/unicode":56}],41:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| TextEditor: {get: function() { |
| return TextEditor; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $___46__46__47_helpers_47_dom_47_element__, |
| $__autoResize__, |
| $___95_baseEditor__, |
| $___46__46__47_eventManager__, |
| $___46__46__47_editors__, |
| $___46__46__47_helpers_47_unicode__, |
| $___46__46__47_helpers_47_dom_47_event__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__1.addClass, |
| getCaretPosition = $__1.getCaretPosition, |
| getComputedStyle = $__1.getComputedStyle, |
| getCssTransform = $__1.getCssTransform, |
| getScrollableElement = $__1.getScrollableElement, |
| getScrollbarWidth = $__1.getScrollbarWidth, |
| innerWidth = $__1.innerWidth, |
| offset = $__1.offset, |
| resetCssTransform = $__1.resetCssTransform, |
| setCaretPosition = $__1.setCaretPosition, |
| hasVerticalScrollbar = $__1.hasVerticalScrollbar, |
| hasHorizontalScrollbar = $__1.hasHorizontalScrollbar; |
| var autoResize = ($__autoResize__ = _dereq_("autoResize"), $__autoResize__ && $__autoResize__.__esModule && $__autoResize__ || {default: $__autoResize__}).default; |
| var BaseEditor = ($___95_baseEditor__ = _dereq_("_baseEditor"), $___95_baseEditor__ && $___95_baseEditor__.__esModule && $___95_baseEditor__ || {default: $___95_baseEditor__}).BaseEditor; |
| var eventManagerObject = ($___46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47_eventManager__ && $___46__46__47_eventManager__.__esModule && $___46__46__47_eventManager__ || {default: $___46__46__47_eventManager__}).eventManager; |
| var $__5 = ($___46__46__47_editors__ = _dereq_("editors"), $___46__46__47_editors__ && $___46__46__47_editors__.__esModule && $___46__46__47_editors__ || {default: $___46__46__47_editors__}), |
| getEditor = $__5.getEditor, |
| registerEditor = $__5.registerEditor; |
| var KEY_CODES = ($___46__46__47_helpers_47_unicode__ = _dereq_("helpers/unicode"), $___46__46__47_helpers_47_unicode__ && $___46__46__47_helpers_47_unicode__.__esModule && $___46__46__47_helpers_47_unicode__ || {default: $___46__46__47_helpers_47_unicode__}).KEY_CODES; |
| var $__7 = ($___46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47_helpers_47_dom_47_event__ && $___46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47_helpers_47_dom_47_event__}), |
| stopPropagation = $__7.stopPropagation, |
| stopImmediatePropagation = $__7.stopImmediatePropagation, |
| isImmediatePropagationStopped = $__7.isImmediatePropagationStopped; |
| var TextEditor = BaseEditor.prototype.extend(); |
| TextEditor.prototype.init = function() { |
| var that = this; |
| this.createElements(); |
| this.eventManager = eventManagerObject(this); |
| this.bindEvents(); |
| this.autoResize = autoResize(); |
| this.instance.addHook('afterDestroy', function() { |
| that.destroy(); |
| }); |
| }; |
| TextEditor.prototype.getValue = function() { |
| return this.TEXTAREA.value; |
| }; |
| TextEditor.prototype.setValue = function(newValue) { |
| this.TEXTAREA.value = newValue; |
| }; |
| var onBeforeKeyDown = function onBeforeKeyDown(event) { |
| var instance = this, |
| that = instance.getActiveEditor(), |
| ctrlDown; |
| ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey; |
| if (event.target !== that.TEXTAREA || isImmediatePropagationStopped(event)) { |
| return; |
| } |
| if (event.keyCode === 17 || event.keyCode === 224 || event.keyCode === 91 || event.keyCode === 93) { |
| stopImmediatePropagation(event); |
| return; |
| } |
| switch (event.keyCode) { |
| case KEY_CODES.ARROW_RIGHT: |
| if (that.isInFullEditMode()) { |
| if ((!that.isWaiting() && !that.allowKeyEventPropagation) || (!that.isWaiting() && that.allowKeyEventPropagation && !that.allowKeyEventPropagation(event.keyCode))) { |
| stopImmediatePropagation(event); |
| } |
| } |
| break; |
| case KEY_CODES.ARROW_LEFT: |
| if (that.isInFullEditMode()) { |
| if ((!that.isWaiting() && !that.allowKeyEventPropagation) || (!that.isWaiting() && that.allowKeyEventPropagation && !that.allowKeyEventPropagation(event.keyCode))) { |
| stopImmediatePropagation(event); |
| } |
| } |
| break; |
| case KEY_CODES.ARROW_UP: |
| case KEY_CODES.ARROW_DOWN: |
| if (that.isInFullEditMode()) { |
| if ((!that.isWaiting() && !that.allowKeyEventPropagation) || (!that.isWaiting() && that.allowKeyEventPropagation && !that.allowKeyEventPropagation(event.keyCode))) { |
| stopImmediatePropagation(event); |
| } |
| } |
| break; |
| case KEY_CODES.ENTER: |
| var selected = that.instance.getSelected(); |
| var isMultipleSelection = !(selected[0] === selected[2] && selected[1] === selected[3]); |
| if ((ctrlDown && !isMultipleSelection) || event.altKey) { |
| if (that.isOpened()) { |
| var caretPosition = getCaretPosition(that.TEXTAREA), |
| value = that.getValue(); |
| var newValue = value.slice(0, caretPosition) + '\n' + value.slice(caretPosition); |
| that.setValue(newValue); |
| setCaretPosition(that.TEXTAREA, caretPosition + 1); |
| } else { |
| that.beginEditing(that.originalValue + '\n'); |
| } |
| stopImmediatePropagation(event); |
| } |
| event.preventDefault(); |
| break; |
| case KEY_CODES.A: |
| case KEY_CODES.X: |
| case KEY_CODES.C: |
| case KEY_CODES.V: |
| if (ctrlDown) { |
| stopImmediatePropagation(event); |
| } |
| break; |
| case KEY_CODES.BACKSPACE: |
| case KEY_CODES.DELETE: |
| case KEY_CODES.HOME: |
| case KEY_CODES.END: |
| stopImmediatePropagation(event); |
| break; |
| } |
| if ([KEY_CODES.ARROW_UP, KEY_CODES.ARROW_RIGHT, KEY_CODES.ARROW_DOWN, KEY_CODES.ARROW_LEFT].indexOf(event.keyCode) === -1) { |
| that.autoResize.resize(String.fromCharCode(event.keyCode)); |
| } |
| }; |
| TextEditor.prototype.open = function() { |
| this.refreshDimensions(); |
| this.instance.addHook('beforeKeyDown', onBeforeKeyDown); |
| }; |
| TextEditor.prototype.close = function(tdOutside) { |
| this.textareaParentStyle.display = 'none'; |
| this.autoResize.unObserve(); |
| if (document.activeElement === this.TEXTAREA) { |
| this.instance.listen(); |
| } |
| this.instance.removeHook('beforeKeyDown', onBeforeKeyDown); |
| }; |
| TextEditor.prototype.focus = function() { |
| this.TEXTAREA.focus(); |
| setCaretPosition(this.TEXTAREA, this.TEXTAREA.value.length); |
| }; |
| TextEditor.prototype.createElements = function() { |
| this.TEXTAREA = document.createElement('TEXTAREA'); |
| addClass(this.TEXTAREA, 'handsontableInput'); |
| this.textareaStyle = this.TEXTAREA.style; |
| this.textareaStyle.width = 0; |
| this.textareaStyle.height = 0; |
| this.TEXTAREA_PARENT = document.createElement('DIV'); |
| addClass(this.TEXTAREA_PARENT, 'handsontableInputHolder'); |
| this.textareaParentStyle = this.TEXTAREA_PARENT.style; |
| this.textareaParentStyle.top = 0; |
| this.textareaParentStyle.left = 0; |
| this.textareaParentStyle.display = 'none'; |
| this.TEXTAREA_PARENT.appendChild(this.TEXTAREA); |
| this.instance.rootElement.appendChild(this.TEXTAREA_PARENT); |
| var that = this; |
| this.instance._registerTimeout(setTimeout(function() { |
| that.refreshDimensions(); |
| }, 0)); |
| }; |
| TextEditor.prototype.getEditedCell = function() { |
| var editorSection = this.checkEditorSection(), |
| editedCell; |
| switch (editorSection) { |
| case 'top': |
| editedCell = this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.getCell({ |
| row: this.row, |
| col: this.col |
| }); |
| this.textareaParentStyle.zIndex = 101; |
| break; |
| case 'top-left-corner': |
| editedCell = this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell({ |
| row: this.row, |
| col: this.col |
| }); |
| this.textareaParentStyle.zIndex = 103; |
| break; |
| case 'bottom-left-corner': |
| editedCell = this.instance.view.wt.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.getCell({ |
| row: this.row, |
| col: this.col |
| }); |
| this.textareaParentStyle.zIndex = 103; |
| break; |
| case 'left': |
| editedCell = this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.getCell({ |
| row: this.row, |
| col: this.col |
| }); |
| this.textareaParentStyle.zIndex = 102; |
| break; |
| case 'bottom': |
| editedCell = this.instance.view.wt.wtOverlays.bottomOverlay.clone.wtTable.getCell({ |
| row: this.row, |
| col: this.col |
| }); |
| this.textareaParentStyle.zIndex = 102; |
| break; |
| default: |
| editedCell = this.instance.getCell(this.row, this.col); |
| this.textareaParentStyle.zIndex = ''; |
| break; |
| } |
| return editedCell != -1 && editedCell != -2 ? editedCell : void 0; |
| }; |
| TextEditor.prototype.refreshDimensions = function() { |
| if (this.state !== Handsontable.EditorState.EDITING) { |
| return; |
| } |
| this.TD = this.getEditedCell(); |
| if (!this.TD) { |
| this.close(true); |
| return; |
| } |
| var currentOffset = offset(this.TD), |
| containerOffset = offset(this.instance.rootElement), |
| scrollableContainer = getScrollableElement(this.TD), |
| totalRowsCount = this.instance.countRows(), |
| editTop = currentOffset.top - containerOffset.top - 1 - (scrollableContainer.scrollTop || 0), |
| editLeft = currentOffset.left - containerOffset.left - 1 - (scrollableContainer.scrollLeft || 0), |
| settings = this.instance.getSettings(), |
| rowHeadersCount = this.instance.hasRowHeaders(), |
| colHeadersCount = this.instance.hasColHeaders(), |
| editorSection = this.checkEditorSection(), |
| backgroundColor = this.TD.style.backgroundColor, |
| cssTransformOffset; |
| switch (editorSection) { |
| case 'top': |
| cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.holder.parentNode); |
| break; |
| case 'left': |
| cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.holder.parentNode); |
| break; |
| case 'top-left-corner': |
| cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.holder.parentNode); |
| break; |
| case 'bottom-left-corner': |
| cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.holder.parentNode); |
| break; |
| case 'bottom': |
| cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.bottomOverlay.clone.wtTable.holder.parentNode); |
| break; |
| } |
| if (colHeadersCount && this.instance.getSelected()[0] === 0 || (settings.fixedRowsBottom && this.instance.getSelected()[0] === totalRowsCount - settings.fixedRowsBottom)) { |
| editTop += 1; |
| } |
| if (this.instance.getSelected()[1] === 0) { |
| editLeft += 1; |
| } |
| if (cssTransformOffset && cssTransformOffset != -1) { |
| this.textareaParentStyle[cssTransformOffset[0]] = cssTransformOffset[1]; |
| } else { |
| resetCssTransform(this.TEXTAREA_PARENT); |
| } |
| this.textareaParentStyle.top = editTop + 'px'; |
| this.textareaParentStyle.left = editLeft + 'px'; |
| var firstRowOffset = this.instance.view.wt.wtViewport.rowsRenderCalculator.startPosition; |
| var firstColumnOffset = this.instance.view.wt.wtViewport.columnsRenderCalculator.startPosition; |
| var horizontalScrollPosition = this.instance.view.wt.wtOverlays.leftOverlay.getScrollPosition(); |
| var verticalScrollPosition = this.instance.view.wt.wtOverlays.topOverlay.getScrollPosition(); |
| var scrollbarWidth = getScrollbarWidth(); |
| var cellTopOffset = this.TD.offsetTop + firstRowOffset - verticalScrollPosition; |
| var cellLeftOffset = this.TD.offsetLeft + firstColumnOffset - horizontalScrollPosition; |
| var width = innerWidth(this.TD) - 8; |
| var actualVerticalScrollbarWidth = hasVerticalScrollbar(scrollableContainer) ? scrollbarWidth : 0; |
| var actualHorizontalScrollbarWidth = hasHorizontalScrollbar(scrollableContainer) ? scrollbarWidth : 0; |
| var maxWidth = this.instance.view.maximumVisibleElementWidth(cellLeftOffset) - 9 - actualVerticalScrollbarWidth; |
| var height = this.TD.scrollHeight + 1; |
| var maxHeight = Math.max(this.instance.view.maximumVisibleElementHeight(cellTopOffset) - actualHorizontalScrollbarWidth, 23); |
| var cellComputedStyle = getComputedStyle(this.TD); |
| this.TEXTAREA.style.fontSize = cellComputedStyle.fontSize; |
| this.TEXTAREA.style.fontFamily = cellComputedStyle.fontFamily; |
| this.TEXTAREA.style.backgroundColor = ''; |
| this.TEXTAREA.style.backgroundColor = backgroundColor ? backgroundColor : getComputedStyle(this.TEXTAREA).backgroundColor; |
| this.autoResize.init(this.TEXTAREA, { |
| minHeight: Math.min(height, maxHeight), |
| maxHeight: maxHeight, |
| minWidth: Math.min(width, maxWidth), |
| maxWidth: maxWidth |
| }, true); |
| this.textareaParentStyle.display = 'block'; |
| }; |
| TextEditor.prototype.bindEvents = function() { |
| var editor = this; |
| this.eventManager.addEventListener(this.TEXTAREA, 'cut', function(event) { |
| stopPropagation(event); |
| }); |
| this.eventManager.addEventListener(this.TEXTAREA, 'paste', function(event) { |
| stopPropagation(event); |
| }); |
| this.instance.addHook('afterScrollHorizontally', function() { |
| editor.refreshDimensions(); |
| }); |
| this.instance.addHook('afterScrollVertically', function() { |
| editor.refreshDimensions(); |
| }); |
| this.instance.addHook('afterColumnResize', function() { |
| editor.refreshDimensions(); |
| editor.focus(); |
| }); |
| this.instance.addHook('afterRowResize', function() { |
| editor.refreshDimensions(); |
| editor.focus(); |
| }); |
| this.instance.addHook('afterDestroy', function() { |
| editor.eventManager.destroy(); |
| }); |
| }; |
| TextEditor.prototype.destroy = function() { |
| this.eventManager.destroy(); |
| }; |
| ; |
| registerEditor('text', TextEditor); |
| |
| //# |
| },{"_baseEditor":31,"autoResize":"autoResize","browser":24,"editors":30,"eventManager":42,"helpers/dom/element":47,"helpers/dom/event":48,"helpers/unicode":56}],42:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| EventManager: {get: function() { |
| return EventManager; |
| }}, |
| eventManager: {get: function() { |
| return eventManager; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__browser__, |
| $__helpers_47_dom_47_element__, |
| $__helpers_47_feature__, |
| $__helpers_47_dom_47_event__; |
| var Handsontable = ($__browser__ = _dereq_("browser"), $__browser__ && $__browser__.__esModule && $__browser__ || {default: $__browser__}).default; |
| var $__1 = ($__helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $__helpers_47_dom_47_element__ && $__helpers_47_dom_47_element__.__esModule && $__helpers_47_dom_47_element__ || {default: $__helpers_47_dom_47_element__}), |
| polymerWrap = $__1.polymerWrap, |
| closest = $__1.closest; |
| var isWebComponentSupportedNatively = ($__helpers_47_feature__ = _dereq_("helpers/feature"), $__helpers_47_feature__ && $__helpers_47_feature__.__esModule && $__helpers_47_feature__ || {default: $__helpers_47_feature__}).isWebComponentSupportedNatively; |
| var _stopImmediatePropagation = ($__helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $__helpers_47_dom_47_event__ && $__helpers_47_dom_47_event__.__esModule && $__helpers_47_dom_47_event__ || {default: $__helpers_47_dom_47_event__}).stopImmediatePropagation; |
| var EventManager = function EventManager() { |
| var context = arguments[0] !== (void 0) ? arguments[0] : null; |
| this.context = context || this; |
| if (!this.context.eventListeners) { |
| this.context.eventListeners = []; |
| } |
| }; |
| ($traceurRuntime.createClass)(EventManager, { |
| addEventListener: function(element, eventName, callback) { |
| var $__4 = this; |
| var context = this.context; |
| function callbackProxy(event) { |
| event = extendEvent(context, event); |
| callback.call(this, event); |
| } |
| this.context.eventListeners.push({ |
| element: element, |
| event: eventName, |
| callback: callback, |
| callbackProxy: callbackProxy |
| }); |
| if (window.addEventListener) { |
| element.addEventListener(eventName, callbackProxy, false); |
| } else { |
| element.attachEvent('on' + eventName, callbackProxy); |
| } |
| Handsontable.countEventManagerListeners++; |
| return (function() { |
| $__4.removeEventListener(element, eventName, callback); |
| }); |
| }, |
| removeEventListener: function(element, eventName, callback) { |
| var len = this.context.eventListeners.length; |
| var tmpEvent; |
| while (len--) { |
| tmpEvent = this.context.eventListeners[len]; |
| if (tmpEvent.event == eventName && tmpEvent.element == element) { |
| if (callback && callback != tmpEvent.callback) { |
| continue; |
| } |
| this.context.eventListeners.splice(len, 1); |
| if (tmpEvent.element.removeEventListener) { |
| tmpEvent.element.removeEventListener(tmpEvent.event, tmpEvent.callbackProxy, false); |
| } else { |
| tmpEvent.element.detachEvent('on' + tmpEvent.event, tmpEvent.callbackProxy); |
| } |
| Handsontable.countEventManagerListeners--; |
| } |
| } |
| }, |
| clearEvents: function() { |
| if (!this.context) { |
| return; |
| } |
| var len = this.context.eventListeners.length; |
| while (len--) { |
| var event = this.context.eventListeners[len]; |
| if (event) { |
| this.removeEventListener(event.element, event.event, event.callback); |
| } |
| } |
| }, |
| clear: function() { |
| this.clearEvents(); |
| }, |
| destroy: function() { |
| this.clearEvents(); |
| this.context = null; |
| }, |
| fireEvent: function(element, eventName) { |
| var options = { |
| bubbles: true, |
| cancelable: (eventName !== 'mousemove'), |
| view: window, |
| detail: 0, |
| screenX: 0, |
| screenY: 0, |
| clientX: 1, |
| clientY: 1, |
| ctrlKey: false, |
| altKey: false, |
| shiftKey: false, |
| metaKey: false, |
| button: 0, |
| relatedTarget: undefined |
| }; |
| var event; |
| if (document.createEvent) { |
| event = document.createEvent('MouseEvents'); |
| event.initMouseEvent(eventName, options.bubbles, options.cancelable, options.view, options.detail, options.screenX, options.screenY, options.clientX, options.clientY, options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, options.relatedTarget || document.body.parentNode); |
| } else { |
| event = document.createEventObject(); |
| } |
| if (element.dispatchEvent) { |
| element.dispatchEvent(event); |
| } else { |
| element.fireEvent('on' + eventName, event); |
| } |
| } |
| }, {}); |
| function extendEvent(context, event) { |
| var componentName = 'HOT-TABLE'; |
| var isHotTableSpotted; |
| var fromElement; |
| var realTarget; |
| var target; |
| var len; |
| var nativeStopImmediatePropagation; |
| event.isTargetWebComponent = false; |
| event.realTarget = event.target; |
| nativeStopImmediatePropagation = event.stopImmediatePropagation; |
| event.stopImmediatePropagation = function() { |
| nativeStopImmediatePropagation.apply(this); |
| _stopImmediatePropagation(this); |
| }; |
| if (!Handsontable.eventManager.isHotTableEnv) { |
| return event; |
| } |
| event = polymerWrap(event); |
| len = event.path ? event.path.length : 0; |
| while (len--) { |
| if (event.path[len].nodeName === componentName) { |
| isHotTableSpotted = true; |
| } else if (isHotTableSpotted && event.path[len].shadowRoot) { |
| target = event.path[len]; |
| break; |
| } |
| if (len === 0 && !target) { |
| target = event.path[len]; |
| } |
| } |
| if (!target) { |
| target = event.target; |
| } |
| event.isTargetWebComponent = true; |
| if (isWebComponentSupportedNatively()) { |
| event.realTarget = event.srcElement || event.toElement; |
| } else if (context instanceof Handsontable.Core || context instanceof Walkontable) { |
| if (context instanceof Handsontable.Core) { |
| fromElement = context.view ? context.view.wt.wtTable.TABLE : null; |
| } else if (context instanceof Walkontable) { |
| fromElement = context.wtTable.TABLE.parentNode.parentNode; |
| } |
| realTarget = closest(event.target, [componentName], fromElement); |
| if (realTarget) { |
| event.realTarget = fromElement.querySelector(componentName) || event.target; |
| } else { |
| event.realTarget = event.target; |
| } |
| } |
| Object.defineProperty(event, 'target', { |
| get: function() { |
| return polymerWrap(target); |
| }, |
| enumerable: true, |
| configurable: true |
| }); |
| return event; |
| } |
| ; |
| Handsontable.countEventManagerListeners = 0; |
| Handsontable.eventManager = eventManager; |
| function eventManager(context) { |
| return new EventManager(context); |
| } |
| |
| //# |
| },{"browser":24,"helpers/dom/element":47,"helpers/dom/event":48,"helpers/feature":49}],43:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| to2dArray: {get: function() { |
| return to2dArray; |
| }}, |
| extendArray: {get: function() { |
| return extendArray; |
| }}, |
| pivot: {get: function() { |
| return pivot; |
| }}, |
| arrayReduce: {get: function() { |
| return arrayReduce; |
| }}, |
| arrayFilter: {get: function() { |
| return arrayFilter; |
| }}, |
| arrayMap: {get: function() { |
| return arrayMap; |
| }}, |
| arrayEach: {get: function() { |
| return arrayEach; |
| }}, |
| arraySum: {get: function() { |
| return arraySum; |
| }}, |
| arrayMax: {get: function() { |
| return arrayMax; |
| }}, |
| arrayMin: {get: function() { |
| return arrayMin; |
| }}, |
| arrayAvg: {get: function() { |
| return arrayAvg; |
| }}, |
| arrayFlatten: {get: function() { |
| return arrayFlatten; |
| }}, |
| arrayUnique: {get: function() { |
| return arrayUnique; |
| }}, |
| __esModule: {value: true} |
| }); |
| function to2dArray(arr) { |
| var i = 0, |
| ilen = arr.length; |
| while (i < ilen) { |
| arr[i] = [arr[i]]; |
| i++; |
| } |
| } |
| function extendArray(arr, extension) { |
| var i = 0, |
| ilen = extension.length; |
| while (i < ilen) { |
| arr.push(extension[i]); |
| i++; |
| } |
| } |
| function pivot(arr) { |
| var pivotedArr = []; |
| if (!arr || arr.length === 0 || !arr[0] || arr[0].length === 0) { |
| return pivotedArr; |
| } |
| var rowCount = arr.length; |
| var colCount = arr[0].length; |
| for (var i = 0; i < rowCount; i++) { |
| for (var j = 0; j < colCount; j++) { |
| if (!pivotedArr[j]) { |
| pivotedArr[j] = []; |
| } |
| pivotedArr[j][i] = arr[i][j]; |
| } |
| } |
| return pivotedArr; |
| } |
| function arrayReduce(array, iteratee, accumulator, initFromArray) { |
| var index = -1, |
| length = array.length; |
| if (initFromArray && length) { |
| accumulator = array[++index]; |
| } |
| while (++index < length) { |
| accumulator = iteratee(accumulator, array[index], index, array); |
| } |
| return accumulator; |
| } |
| function arrayFilter(array, predicate) { |
| var index = -1, |
| length = array.length, |
| resIndex = -1, |
| result = []; |
| while (++index < length) { |
| var value = array[index]; |
| if (predicate(value, index, array)) { |
| result[++resIndex] = value; |
| } |
| } |
| return result; |
| } |
| function arrayMap(array, iteratee) { |
| var index = -1, |
| length = array.length, |
| resIndex = -1, |
| result = []; |
| while (++index < length) { |
| var value = array[index]; |
| result[++resIndex] = iteratee(value, index, array); |
| } |
| return result; |
| } |
| function arrayEach(array, iteratee) { |
| var index = -1, |
| length = array.length; |
| while (++index < length) { |
| if (iteratee(array[index], index, array) === false) { |
| break; |
| } |
| } |
| return array; |
| } |
| function arraySum(array) { |
| return arrayReduce(array, (function(a, b) { |
| return (a + b); |
| }), 0); |
| } |
| function arrayMax(array) { |
| return arrayReduce(array, (function(a, b) { |
| return (a > b ? a : b); |
| }), Array.isArray(array) ? array[0] : void 0); |
| } |
| function arrayMin(array) { |
| return arrayReduce(array, (function(a, b) { |
| return (a < b ? a : b); |
| }), Array.isArray(array) ? array[0] : void 0); |
| } |
| function arrayAvg(array) { |
| if (!array.length) { |
| return 0; |
| } |
| return arraySum(array) / array.length; |
| } |
| function arrayFlatten(array) { |
| return arrayReduce(array, (function(initial, value) { |
| return initial.concat(Array.isArray(value) ? arrayFlatten(value) : value); |
| }), []); |
| } |
| function arrayUnique(array) { |
| var unique = []; |
| arrayEach(array, (function(value) { |
| if (unique.indexOf(value) === -1) { |
| unique.push(value); |
| } |
| })); |
| return unique; |
| } |
| |
| //# |
| },{}],44:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| isIE8: {get: function() { |
| return isIE8; |
| }}, |
| isIE9: {get: function() { |
| return isIE9; |
| }}, |
| isSafari: {get: function() { |
| return isSafari; |
| }}, |
| isChrome: {get: function() { |
| return isChrome; |
| }}, |
| isMobileBrowser: {get: function() { |
| return isMobileBrowser; |
| }}, |
| __esModule: {value: true} |
| }); |
| var _isIE8 = !(document.createTextNode('test').textContent); |
| function isIE8() { |
| return _isIE8; |
| } |
| var _isIE9 = !!(document.documentMode); |
| function isIE9() { |
| return _isIE9; |
| } |
| var _isSafari = (/Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor)); |
| function isSafari() { |
| return _isSafari; |
| } |
| var _isChrome = (/Chrome/.test(navigator.userAgent) && /Google/.test(navigator.vendor)); |
| function isChrome() { |
| return _isChrome; |
| } |
| function isMobileBrowser(userAgent) { |
| if (!userAgent) { |
| userAgent = navigator.userAgent; |
| } |
| return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent)); |
| } |
| |
| //# |
| },{}],45:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| spreadsheetColumnLabel: {get: function() { |
| return spreadsheetColumnLabel; |
| }}, |
| createSpreadsheetData: {get: function() { |
| return createSpreadsheetData; |
| }}, |
| createSpreadsheetObjectData: {get: function() { |
| return createSpreadsheetObjectData; |
| }}, |
| createEmptySpreadsheetData: {get: function() { |
| return createEmptySpreadsheetData; |
| }}, |
| translateRowsToColumns: {get: function() { |
| return translateRowsToColumns; |
| }}, |
| cellMethodLookupFactory: {get: function() { |
| return cellMethodLookupFactory; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $__object__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var getPrototypeOf = ($__object__ = _dereq_("object"), $__object__ && $__object__.__esModule && $__object__ || {default: $__object__}).getPrototypeOf; |
| function spreadsheetColumnLabel(index) { |
| var dividend = index + 1; |
| var columnLabel = ''; |
| var modulo; |
| while (dividend > 0) { |
| modulo = (dividend - 1) % 26; |
| columnLabel = String.fromCharCode(65 + modulo) + columnLabel; |
| dividend = parseInt((dividend - modulo) / 26, 10); |
| } |
| return columnLabel; |
| } |
| function createSpreadsheetData(rowCount, colCount) { |
| rowCount = typeof rowCount === 'number' ? rowCount : 100; |
| colCount = typeof colCount === 'number' ? colCount : 4; |
| var rows = [], |
| i, |
| j; |
| for (i = 0; i < rowCount; i++) { |
| var row = []; |
| for (j = 0; j < colCount; j++) { |
| row.push(spreadsheetColumnLabel(j) + (i + 1)); |
| } |
| rows.push(row); |
| } |
| return rows; |
| } |
| function createSpreadsheetObjectData(rowCount, colCount) { |
| rowCount = typeof rowCount === 'number' ? rowCount : 100; |
| colCount = typeof colCount === 'number' ? colCount : 4; |
| var rows = [], |
| i, |
| j; |
| for (i = 0; i < rowCount; i++) { |
| var row = {}; |
| for (j = 0; j < colCount; j++) { |
| row['prop' + j] = spreadsheetColumnLabel(j) + (i + 1); |
| } |
| rows.push(row); |
| } |
| return rows; |
| } |
| function createEmptySpreadsheetData(rows, columns) { |
| var data = []; |
| var row; |
| for (var i = 0; i < rows; i++) { |
| row = []; |
| for (var j = 0; j < columns; j++) { |
| row.push(''); |
| } |
| data.push(row); |
| } |
| return data; |
| } |
| function translateRowsToColumns(input) { |
| var i, |
| ilen, |
| j, |
| jlen, |
| output = [], |
| olen = 0; |
| for (i = 0, ilen = input.length; i < ilen; i++) { |
| for (j = 0, jlen = input[i].length; j < jlen; j++) { |
| if (j == olen) { |
| output.push([]); |
| olen++; |
| } |
| output[j].push(input[i][j]); |
| } |
| } |
| return output; |
| } |
| function cellMethodLookupFactory(methodName, allowUndefined) { |
| allowUndefined = typeof allowUndefined == 'undefined' ? true : allowUndefined; |
| return function cellMethodLookup(row, col) { |
| return (function getMethodFromProperties(properties) { |
| if (!properties) { |
| return; |
| } else if (properties.hasOwnProperty(methodName) && properties[methodName] !== void 0) { |
| return properties[methodName]; |
| } else if (properties.hasOwnProperty('type') && properties.type) { |
| var type; |
| if (typeof properties.type != 'string') { |
| throw new Error('Cell type must be a string '); |
| } |
| type = translateTypeNameToObject(properties.type); |
| if (type.hasOwnProperty(methodName)) { |
| return type[methodName]; |
| } else if (allowUndefined) { |
| return; |
| } |
| } |
| return getMethodFromProperties(getPrototypeOf(properties)); |
| })(typeof row == 'number' ? this.getCellMeta(row, col) : row); |
| }; |
| function translateTypeNameToObject(typeName) { |
| var type = Handsontable.cellTypes[typeName]; |
| if (typeof type == 'undefined') { |
| throw new Error('You declared cell type "' + typeName + '" as a string that is not mapped to a known object. ' + 'Cell type must be an object or a string mapped to an object in Handsontable.cellTypes'); |
| } |
| return type; |
| } |
| } |
| |
| //# |
| },{"browser":24,"object":53}],46:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| getNormalizedDate: {get: function() { |
| return getNormalizedDate; |
| }}, |
| __esModule: {value: true} |
| }); |
| function getNormalizedDate(dateString) { |
| var nativeDate = new Date(dateString); |
| if (!isNaN(new Date(dateString + 'T00:00').getDate())) { |
| return new Date(nativeDate.getTime() + nativeDate.getTimezoneOffset() * 60000); |
| } |
| return nativeDate; |
| } |
| |
| //# |
| },{}],47:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| closest: {get: function() { |
| return closest; |
| }}, |
| closestDown: {get: function() { |
| return closestDown; |
| }}, |
| isChildOf: {get: function() { |
| return isChildOf; |
| }}, |
| isChildOfWebComponentTable: {get: function() { |
| return isChildOfWebComponentTable; |
| }}, |
| polymerWrap: {get: function() { |
| return polymerWrap; |
| }}, |
| polymerUnwrap: {get: function() { |
| return polymerUnwrap; |
| }}, |
| index: {get: function() { |
| return index; |
| }}, |
| overlayContainsElement: {get: function() { |
| return overlayContainsElement; |
| }}, |
| hasClass: {get: function() { |
| return hasClass; |
| }}, |
| addClass: {get: function() { |
| return addClass; |
| }}, |
| removeClass: {get: function() { |
| return removeClass; |
| }}, |
| removeTextNodes: {get: function() { |
| return removeTextNodes; |
| }}, |
| empty: {get: function() { |
| return empty; |
| }}, |
| HTML_CHARACTERS: {get: function() { |
| return HTML_CHARACTERS; |
| }}, |
| fastInnerHTML: {get: function() { |
| return fastInnerHTML; |
| }}, |
| fastInnerText: {get: function() { |
| return fastInnerText; |
| }}, |
| isVisible: {get: function() { |
| return isVisible; |
| }}, |
| offset: {get: function() { |
| return offset; |
| }}, |
| getWindowScrollTop: {get: function() { |
| return getWindowScrollTop; |
| }}, |
| getWindowScrollLeft: {get: function() { |
| return getWindowScrollLeft; |
| }}, |
| getScrollTop: {get: function() { |
| return getScrollTop; |
| }}, |
| getScrollLeft: {get: function() { |
| return getScrollLeft; |
| }}, |
| getScrollableElement: {get: function() { |
| return getScrollableElement; |
| }}, |
| getTrimmingContainer: {get: function() { |
| return getTrimmingContainer; |
| }}, |
| getStyle: {get: function() { |
| return getStyle; |
| }}, |
| getComputedStyle: {get: function() { |
| return getComputedStyle; |
| }}, |
| outerWidth: {get: function() { |
| return outerWidth; |
| }}, |
| outerHeight: {get: function() { |
| return outerHeight; |
| }}, |
| innerHeight: {get: function() { |
| return innerHeight; |
| }}, |
| innerWidth: {get: function() { |
| return innerWidth; |
| }}, |
| addEvent: {get: function() { |
| return addEvent; |
| }}, |
| removeEvent: {get: function() { |
| return removeEvent; |
| }}, |
| getCaretPosition: {get: function() { |
| return getCaretPosition; |
| }}, |
| getSelectionEndPosition: {get: function() { |
| return getSelectionEndPosition; |
| }}, |
| getSelectionText: {get: function() { |
| return getSelectionText; |
| }}, |
| setCaretPosition: {get: function() { |
| return setCaretPosition; |
| }}, |
| getScrollbarWidth: {get: function() { |
| return getScrollbarWidth; |
| }}, |
| hasVerticalScrollbar: {get: function() { |
| return hasVerticalScrollbar; |
| }}, |
| hasHorizontalScrollbar: {get: function() { |
| return hasHorizontalScrollbar; |
| }}, |
| setOverlayPosition: {get: function() { |
| return setOverlayPosition; |
| }}, |
| getCssTransform: {get: function() { |
| return getCssTransform; |
| }}, |
| resetCssTransform: {get: function() { |
| return resetCssTransform; |
| }}, |
| isInput: {get: function() { |
| return isInput; |
| }}, |
| isOutsideInput: {get: function() { |
| return isOutsideInput; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $___46__46__47_feature__; |
| var $__0 = ($___46__46__47_browser__ = _dereq_("../browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}), |
| isIE8 = $__0.isIE8, |
| isIE9 = $__0.isIE9, |
| isSafari = $__0.isSafari; |
| var hasCaptionProblem = ($___46__46__47_feature__ = _dereq_("../feature"), $___46__46__47_feature__ && $___46__46__47_feature__.__esModule && $___46__46__47_feature__ || {default: $___46__46__47_feature__}).hasCaptionProblem; |
| function closest(element, nodes, until) { |
| while (element != null && element !== until) { |
| if (element.nodeType === Node.ELEMENT_NODE && (nodes.indexOf(element.nodeName) > -1 || nodes.indexOf(element) > -1)) { |
| return element; |
| } |
| if (element.host && element.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { |
| element = element.host; |
| } else { |
| element = element.parentNode; |
| } |
| } |
| return null; |
| } |
| function closestDown(element, nodes, until) { |
| var matched = []; |
| while (element) { |
| element = closest(element, nodes, until); |
| if (!element || (until && !until.contains(element))) { |
| break; |
| } |
| matched.push(element); |
| if (element.host && element.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { |
| element = element.host; |
| } else { |
| element = element.parentNode; |
| } |
| } |
| var length = matched.length; |
| return length ? matched[length - 1] : null; |
| } |
| function isChildOf(child, parent) { |
| var node = child.parentNode; |
| var queriedParents = []; |
| if (typeof parent === 'string') { |
| queriedParents = Array.prototype.slice.call(document.querySelectorAll(parent), 0); |
| } else { |
| queriedParents.push(parent); |
| } |
| while (node != null) { |
| if (queriedParents.indexOf(node) > -1) { |
| return true; |
| } |
| node = node.parentNode; |
| } |
| return false; |
| } |
| function isChildOfWebComponentTable(element) { |
| var hotTableName = 'hot-table', |
| result = false, |
| parentNode; |
| parentNode = polymerWrap(element); |
| function isHotTable(element) { |
| return element.nodeType === Node.ELEMENT_NODE && element.nodeName === hotTableName.toUpperCase(); |
| } |
| while (parentNode != null) { |
| if (isHotTable(parentNode)) { |
| result = true; |
| break; |
| } else if (parentNode.host && parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { |
| result = isHotTable(parentNode.host); |
| if (result) { |
| break; |
| } |
| parentNode = parentNode.host; |
| } |
| parentNode = parentNode.parentNode; |
| } |
| return result; |
| } |
| function polymerWrap(element) { |
| return typeof Polymer !== 'undefined' && typeof wrap === 'function' ? wrap(element) : element; |
| } |
| function polymerUnwrap(element) { |
| return typeof Polymer !== 'undefined' && typeof unwrap === 'function' ? unwrap(element) : element; |
| } |
| function index(element) { |
| var i = 0; |
| if (element.previousSibling) { |
| while (element = element.previousSibling) { |
| ++i; |
| } |
| } |
| return i; |
| } |
| function overlayContainsElement(overlayType, element) { |
| var overlayElement = document.querySelector('.ht_clone_' + overlayType); |
| return overlayElement ? overlayElement.contains(element) : null; |
| } |
| var classListSupport = document.documentElement.classList ? true : false; |
| var _hasClass, |
| _addClass, |
| _removeClass; |
| function filterEmptyClassNames(classNames) { |
| var len = 0, |
| result = []; |
| if (!classNames || !classNames.length) { |
| return result; |
| } |
| while (classNames[len]) { |
| result.push(classNames[len]); |
| len++; |
| } |
| return result; |
| } |
| if (classListSupport) { |
| var isSupportMultipleClassesArg = (function() { |
| var element = document.createElement('div'); |
| element.classList.add('test', 'test2'); |
| return element.classList.contains('test2'); |
| }()); |
| _hasClass = function _hasClass(element, className) { |
| if (className === '') { |
| return false; |
| } |
| return element.classList.contains(className); |
| }; |
| _addClass = function _addClass(element, className) { |
| var len = 0; |
| if (typeof className === 'string') { |
| className = className.split(' '); |
| } |
| className = filterEmptyClassNames(className); |
| if (isSupportMultipleClassesArg) { |
| element.classList.add.apply(element.classList, className); |
| } else { |
| while (className && className[len]) { |
| element.classList.add(className[len]); |
| len++; |
| } |
| } |
| }; |
| _removeClass = function _removeClass(element, className) { |
| var len = 0; |
| if (typeof className === 'string') { |
| className = className.split(' '); |
| } |
| className = filterEmptyClassNames(className); |
| if (isSupportMultipleClassesArg) { |
| element.classList.remove.apply(element.classList, className); |
| } else { |
| while (className && className[len]) { |
| element.classList.remove(className[len]); |
| len++; |
| } |
| } |
| }; |
| } else { |
| var createClassNameRegExp = function createClassNameRegExp(className) { |
| return new RegExp('(\\s|^)' + className + '(\\s|$)'); |
| }; |
| _hasClass = function _hasClass(element, className) { |
| return element.className.match(createClassNameRegExp(className)) ? true : false; |
| }; |
| _addClass = function _addClass(element, className) { |
| var len = 0, |
| _className = element.className; |
| if (typeof className === 'string') { |
| className = className.split(' '); |
| } |
| if (_className === '') { |
| _className = className.join(' '); |
| } else { |
| while (className && className[len]) { |
| if (!createClassNameRegExp(className[len]).test(_className)) { |
| _className += ' ' + className[len]; |
| } |
| len++; |
| } |
| } |
| element.className = _className; |
| }; |
| _removeClass = function _removeClass(element, className) { |
| var len = 0, |
| _className = element.className; |
| if (typeof className === 'string') { |
| className = className.split(' '); |
| } |
| while (className && className[len]) { |
| _className = _className.replace(createClassNameRegExp(className[len]), ' ').trim(); |
| len++; |
| } |
| if (element.className !== _className) { |
| element.className = _className; |
| } |
| }; |
| } |
| function hasClass(element, className) { |
| return _hasClass(element, className); |
| } |
| function addClass(element, className) { |
| return _addClass(element, className); |
| } |
| function removeClass(element, className) { |
| return _removeClass(element, className); |
| } |
| function removeTextNodes(element, parent) { |
| if (element.nodeType === 3) { |
| parent.removeChild(element); |
| } else if (['TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR'].indexOf(element.nodeName) > -1) { |
| var childs = element.childNodes; |
| for (var i = childs.length - 1; i >= 0; i--) { |
| removeTextNodes(childs[i], element); |
| } |
| } |
| } |
| function empty(element) { |
| var child; |
| while (child = element.lastChild) { |
| element.removeChild(child); |
| } |
| } |
| var HTML_CHARACTERS = /(<(.*)>|&(.*);)/; |
| function fastInnerHTML(element, content) { |
| if (HTML_CHARACTERS.test(content)) { |
| element.innerHTML = content; |
| } else { |
| fastInnerText(element, content); |
| } |
| } |
| var textContextSupport = document.createTextNode('test').textContent ? true : false; |
| function fastInnerText(element, content) { |
| var child = element.firstChild; |
| if (child && child.nodeType === 3 && child.nextSibling === null) { |
| if (textContextSupport) { |
| child.textContent = content; |
| } else { |
| child.data = content; |
| } |
| } else { |
| empty(element); |
| element.appendChild(document.createTextNode(content)); |
| } |
| } |
| function isVisible(elem) { |
| var next = elem; |
| while (polymerUnwrap(next) !== document.documentElement) { |
| if (next === null) { |
| return false; |
| } else if (next.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { |
| if (next.host) { |
| if (next.host.impl) { |
| return isVisible(next.host.impl); |
| } else if (next.host) { |
| return isVisible(next.host); |
| } else { |
| throw new Error('Lost in Web Components world'); |
| } |
| } else { |
| return false; |
| } |
| } else if (next.style.display === 'none') { |
| return false; |
| } |
| next = next.parentNode; |
| } |
| return true; |
| } |
| function offset(elem) { |
| var offsetLeft, |
| offsetTop, |
| lastElem, |
| docElem, |
| box; |
| docElem = document.documentElement; |
| if (hasCaptionProblem() && elem.firstChild && elem.firstChild.nodeName === 'CAPTION') { |
| box = elem.getBoundingClientRect(); |
| return { |
| top: box.top + (window.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0), |
| left: box.left + (window.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0) |
| }; |
| } |
| offsetLeft = elem.offsetLeft; |
| offsetTop = elem.offsetTop; |
| lastElem = elem; |
| while (elem = elem.offsetParent) { |
| if (elem === document.body) { |
| break; |
| } |
| offsetLeft += elem.offsetLeft; |
| offsetTop += elem.offsetTop; |
| lastElem = elem; |
| } |
| if (lastElem && lastElem.style.position === 'fixed') { |
| offsetLeft += window.pageXOffset || docElem.scrollLeft; |
| offsetTop += window.pageYOffset || docElem.scrollTop; |
| } |
| return { |
| left: offsetLeft, |
| top: offsetTop |
| }; |
| } |
| function getWindowScrollTop() { |
| var res = window.scrollY; |
| if (res === void 0) { |
| res = document.documentElement.scrollTop; |
| } |
| return res; |
| } |
| function getWindowScrollLeft() { |
| var res = window.scrollX; |
| if (res === void 0) { |
| res = document.documentElement.scrollLeft; |
| } |
| return res; |
| } |
| function getScrollTop(element) { |
| if (element === window) { |
| return getWindowScrollTop(); |
| } else { |
| return element.scrollTop; |
| } |
| } |
| function getScrollLeft(element) { |
| if (element === window) { |
| return getWindowScrollLeft(); |
| } else { |
| return element.scrollLeft; |
| } |
| } |
| function getScrollableElement(element) { |
| var el = element.parentNode, |
| props = ['auto', 'scroll'], |
| overflow, |
| overflowX, |
| overflowY, |
| computedStyle = '', |
| computedOverflow = '', |
| computedOverflowY = '', |
| computedOverflowX = ''; |
| while (el && el.style && document.body !== el) { |
| overflow = el.style.overflow; |
| overflowX = el.style.overflowX; |
| overflowY = el.style.overflowY; |
| if (overflow == 'scroll' || overflowX == 'scroll' || overflowY == 'scroll') { |
| return el; |
| } else if (window.getComputedStyle) { |
| computedStyle = window.getComputedStyle(el); |
| computedOverflow = computedStyle.getPropertyValue('overflow'); |
| computedOverflowY = computedStyle.getPropertyValue('overflow-y'); |
| computedOverflowX = computedStyle.getPropertyValue('overflow-x'); |
| if (computedOverflow === 'scroll' || computedOverflowX === 'scroll' || computedOverflowY === 'scroll') { |
| return el; |
| } |
| } |
| if (el.clientHeight <= el.scrollHeight && (props.indexOf(overflowY) !== -1 || props.indexOf(overflow) !== -1 || props.indexOf(computedOverflow) !== -1 || props.indexOf(computedOverflowY) !== -1)) { |
| return el; |
| } |
| if (el.clientWidth <= el.scrollWidth && (props.indexOf(overflowX) !== -1 || props.indexOf(overflow) !== -1 || props.indexOf(computedOverflow) !== -1 || props.indexOf(computedOverflowX) !== -1)) { |
| return el; |
| } |
| el = el.parentNode; |
| } |
| return window; |
| } |
| function getTrimmingContainer(base) { |
| var el = base.parentNode; |
| while (el && el.style && document.body !== el) { |
| if (el.style.overflow !== 'visible' && el.style.overflow !== '') { |
| return el; |
| } else if (window.getComputedStyle) { |
| var computedStyle = window.getComputedStyle(el); |
| if (computedStyle.getPropertyValue('overflow') !== 'visible' && computedStyle.getPropertyValue('overflow') !== '') { |
| return el; |
| } |
| } |
| el = el.parentNode; |
| } |
| return window; |
| } |
| function getStyle(element, prop) { |
| if (!element) { |
| return; |
| } else if (element === window) { |
| if (prop === 'width') { |
| return window.innerWidth + 'px'; |
| } else if (prop === 'height') { |
| return window.innerHeight + 'px'; |
| } |
| return; |
| } |
| var styleProp = element.style[prop], |
| computedStyle; |
| if (styleProp !== '' && styleProp !== void 0) { |
| return styleProp; |
| } else { |
| computedStyle = getComputedStyle(element); |
| if (computedStyle[prop] !== '' && computedStyle[prop] !== void 0) { |
| return computedStyle[prop]; |
| } |
| return void 0; |
| } |
| } |
| function getComputedStyle(element) { |
| return element.currentStyle || document.defaultView.getComputedStyle(element); |
| } |
| function outerWidth(element) { |
| return element.offsetWidth; |
| } |
| function outerHeight(elem) { |
| if (hasCaptionProblem() && elem.firstChild && elem.firstChild.nodeName === 'CAPTION') { |
| return elem.offsetHeight + elem.firstChild.offsetHeight; |
| } else { |
| return elem.offsetHeight; |
| } |
| } |
| function innerHeight(element) { |
| return element.clientHeight || element.innerHeight; |
| } |
| function innerWidth(element) { |
| return element.clientWidth || element.innerWidth; |
| } |
| function addEvent(element, event, callback) { |
| if (window.addEventListener) { |
| element.addEventListener(event, callback, false); |
| } else { |
| element.attachEvent('on' + event, callback); |
| } |
| } |
| function removeEvent(element, event, callback) { |
| if (window.removeEventListener) { |
| element.removeEventListener(event, callback, false); |
| } else { |
| element.detachEvent('on' + event, callback); |
| } |
| } |
| function getCaretPosition(el) { |
| if (el.selectionStart) { |
| return el.selectionStart; |
| } else if (document.selection) { |
| el.focus(); |
| var r = document.selection.createRange(); |
| if (r == null) { |
| return 0; |
| } |
| var re = el.createTextRange(); |
| var rc = re.duplicate(); |
| re.moveToBookmark(r.getBookmark()); |
| rc.setEndPoint('EndToStart', re); |
| return rc.text.length; |
| } |
| return 0; |
| } |
| function getSelectionEndPosition(el) { |
| if (el.selectionEnd) { |
| return el.selectionEnd; |
| } else if (document.selection) { |
| var r = document.selection.createRange(); |
| if (r == null) { |
| return 0; |
| } |
| var re = el.createTextRange(); |
| return re.text.indexOf(r.text) + r.text.length; |
| } |
| } |
| function getSelectionText() { |
| var text = ''; |
| if (window.getSelection) { |
| text = window.getSelection().toString(); |
| } else if (document.selection && document.selection.type !== 'Control') { |
| text = document.selection.createRange().text; |
| } |
| return text; |
| } |
| function setCaretPosition(element, pos, endPos) { |
| if (endPos === void 0) { |
| endPos = pos; |
| } |
| if (element.setSelectionRange) { |
| element.focus(); |
| try { |
| element.setSelectionRange(pos, endPos); |
| } catch (err) { |
| var elementParent = element.parentNode; |
| var parentDisplayValue = elementParent.style.display; |
| elementParent.style.display = 'block'; |
| element.setSelectionRange(pos, endPos); |
| elementParent.style.display = parentDisplayValue; |
| } |
| } else if (element.createTextRange) { |
| var range = element.createTextRange(); |
| range.collapse(true); |
| range.moveEnd('character', endPos); |
| range.moveStart('character', pos); |
| range.select(); |
| } |
| } |
| var cachedScrollbarWidth; |
| function walkontableCalculateScrollbarWidth() { |
| var inner = document.createElement('p'); |
| inner.style.width = '100%'; |
| inner.style.height = '200px'; |
| var outer = document.createElement('div'); |
| outer.style.position = 'absolute'; |
| outer.style.top = '0px'; |
| outer.style.left = '0px'; |
| outer.style.visibility = 'hidden'; |
| outer.style.width = '200px'; |
| outer.style.height = '150px'; |
| outer.style.overflow = 'hidden'; |
| outer.appendChild(inner); |
| (document.body || document.documentElement).appendChild(outer); |
| var w1 = inner.offsetWidth; |
| outer.style.overflow = 'scroll'; |
| var w2 = inner.offsetWidth; |
| if (w1 == w2) { |
| w2 = outer.clientWidth; |
| } |
| (document.body || document.documentElement).removeChild(outer); |
| return (w1 - w2); |
| } |
| function getScrollbarWidth() { |
| if (cachedScrollbarWidth === void 0) { |
| cachedScrollbarWidth = walkontableCalculateScrollbarWidth(); |
| } |
| return cachedScrollbarWidth; |
| } |
| function hasVerticalScrollbar(element) { |
| return element.offsetWidth !== element.clientWidth; |
| } |
| function hasHorizontalScrollbar(element) { |
| return element.offsetHeight !== element.clientHeight; |
| } |
| function setOverlayPosition(overlayElem, left, top) { |
| if (isIE8() || isIE9()) { |
| overlayElem.style.top = top; |
| overlayElem.style.left = left; |
| } else if (isSafari()) { |
| overlayElem.style['-webkit-transform'] = 'translate3d(' + left + ',' + top + ',0)'; |
| } else { |
| overlayElem.style.transform = 'translate3d(' + left + ',' + top + ',0)'; |
| } |
| } |
| function getCssTransform(element) { |
| var transform; |
| if (element.style.transform && (transform = element.style.transform) !== '') { |
| return ['transform', transform]; |
| } else if (element.style['-webkit-transform'] && (transform = element.style['-webkit-transform']) !== '') { |
| return ['-webkit-transform', transform]; |
| } |
| return -1; |
| } |
| function resetCssTransform(element) { |
| if (element.style.transform && element.style.transform !== '') { |
| element.style.transform = ''; |
| } else if (element.style['-webkit-transform'] && element.style['-webkit-transform'] !== '') { |
| element.style['-webkit-transform'] = ''; |
| } |
| } |
| function isInput(element) { |
| var inputs = ['INPUT', 'SELECT', 'TEXTAREA']; |
| return element && (inputs.indexOf(element.nodeName) > -1 || element.contentEditable === 'true'); |
| } |
| function isOutsideInput(element) { |
| return isInput(element) && element.className.indexOf('handsontableInput') == -1 && element.className.indexOf('copyPaste') == -1; |
| } |
| |
| //# |
| },{"../browser":44,"../feature":49}],48:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| stopImmediatePropagation: {get: function() { |
| return stopImmediatePropagation; |
| }}, |
| isImmediatePropagationStopped: {get: function() { |
| return isImmediatePropagationStopped; |
| }}, |
| stopPropagation: {get: function() { |
| return stopPropagation; |
| }}, |
| pageX: {get: function() { |
| return pageX; |
| }}, |
| pageY: {get: function() { |
| return pageY; |
| }}, |
| isRightClick: {get: function() { |
| return isRightClick; |
| }}, |
| isLeftClick: {get: function() { |
| return isLeftClick; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__element__; |
| var $__0 = ($__element__ = _dereq_("element"), $__element__ && $__element__.__esModule && $__element__ || {default: $__element__}), |
| getWindowScrollTop = $__0.getWindowScrollTop, |
| getWindowScrollLeft = $__0.getWindowScrollLeft; |
| function stopImmediatePropagation(event) { |
| event.isImmediatePropagationEnabled = false; |
| event.cancelBubble = true; |
| } |
| function isImmediatePropagationStopped(event) { |
| return event.isImmediatePropagationEnabled === false; |
| } |
| function stopPropagation(event) { |
| if (typeof event.stopPropagation === 'function') { |
| event.stopPropagation(); |
| } else { |
| event.cancelBubble = true; |
| } |
| } |
| function pageX(event) { |
| if (event.pageX) { |
| return event.pageX; |
| } |
| return event.clientX + getWindowScrollLeft(); |
| } |
| function pageY(event) { |
| if (event.pageY) { |
| return event.pageY; |
| } |
| return event.clientY + getWindowScrollTop(); |
| } |
| function isRightClick(event) { |
| return event.button === 2; |
| } |
| function isLeftClick(event) { |
| return event.button === 0; |
| } |
| |
| //# |
| },{"element":47}],49:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| requestAnimationFrame: {get: function() { |
| return requestAnimationFrame; |
| }}, |
| cancelAnimationFrame: {get: function() { |
| return cancelAnimationFrame; |
| }}, |
| isTouchSupported: {get: function() { |
| return isTouchSupported; |
| }}, |
| isWebComponentSupportedNatively: {get: function() { |
| return isWebComponentSupportedNatively; |
| }}, |
| hasCaptionProblem: {get: function() { |
| return hasCaptionProblem; |
| }}, |
| getComparisonFunction: {get: function() { |
| return getComparisonFunction; |
| }}, |
| __esModule: {value: true} |
| }); |
| var lastTime = 0; |
| var vendors = ['ms', 'moz', 'webkit', 'o']; |
| var _requestAnimationFrame = window.requestAnimationFrame; |
| var _cancelAnimationFrame = window.cancelAnimationFrame; |
| for (var x = 0; x < vendors.length && !_requestAnimationFrame; ++x) { |
| _requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']; |
| _cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame']; |
| } |
| if (!_requestAnimationFrame) { |
| _requestAnimationFrame = function(callback) { |
| var currTime = new Date().getTime(); |
| var timeToCall = Math.max(0, 16 - (currTime - lastTime)); |
| var id = window.setTimeout(function() { |
| callback(currTime + timeToCall); |
| }, timeToCall); |
| lastTime = currTime + timeToCall; |
| return id; |
| }; |
| } |
| if (!_cancelAnimationFrame) { |
| _cancelAnimationFrame = function(id) { |
| clearTimeout(id); |
| }; |
| } |
| function requestAnimationFrame(callback) { |
| return _requestAnimationFrame.call(window, callback); |
| } |
| function cancelAnimationFrame(id) { |
| _cancelAnimationFrame.call(window, id); |
| } |
| function isTouchSupported() { |
| return ('ontouchstart' in window); |
| } |
| function isWebComponentSupportedNatively() { |
| var test = document.createElement('div'); |
| return test.createShadowRoot && test.createShadowRoot.toString().match(/\[native code\]/) ? true : false; |
| } |
| var _hasCaptionProblem; |
| function detectCaptionProblem() { |
| var TABLE = document.createElement('TABLE'); |
| TABLE.style.borderSpacing = 0; |
| TABLE.style.borderWidth = 0; |
| TABLE.style.padding = 0; |
| var TBODY = document.createElement('TBODY'); |
| TABLE.appendChild(TBODY); |
| TBODY.appendChild(document.createElement('TR')); |
| TBODY.firstChild.appendChild(document.createElement('TD')); |
| TBODY.firstChild.firstChild.innerHTML = '<tr><td>t<br>t</td></tr>'; |
| var CAPTION = document.createElement('CAPTION'); |
| CAPTION.innerHTML = 'c<br>c<br>c<br>c'; |
| CAPTION.style.padding = 0; |
| CAPTION.style.margin = 0; |
| TABLE.insertBefore(CAPTION, TBODY); |
| document.body.appendChild(TABLE); |
| _hasCaptionProblem = (TABLE.offsetHeight < 2 * TABLE.lastChild.offsetHeight); |
| document.body.removeChild(TABLE); |
| } |
| function hasCaptionProblem() { |
| if (_hasCaptionProblem === void 0) { |
| detectCaptionProblem(); |
| } |
| return _hasCaptionProblem; |
| } |
| var comparisonFunction; |
| function getComparisonFunction(language) { |
| var options = arguments[1] !== (void 0) ? arguments[1] : {}; |
| if (comparisonFunction) { |
| return comparisonFunction; |
| } |
| if (typeof Intl === 'object') { |
| comparisonFunction = new Intl.Collator(language, options).compare; |
| } else if (typeof String.prototype.localeCompare === 'function') { |
| comparisonFunction = (function(a, b) { |
| return (a + '').localeCompare(b); |
| }); |
| } else { |
| comparisonFunction = (function(a, b) { |
| if (a === b) { |
| return 0; |
| } |
| return a > b ? -1 : 1; |
| }); |
| } |
| return comparisonFunction; |
| } |
| |
| //# |
| },{}],50:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| isFunction: {get: function() { |
| return isFunction; |
| }}, |
| proxy: {get: function() { |
| return proxy; |
| }}, |
| throttle: {get: function() { |
| return throttle; |
| }}, |
| throttleAfterHits: {get: function() { |
| return throttleAfterHits; |
| }}, |
| debounce: {get: function() { |
| return debounce; |
| }}, |
| pipe: {get: function() { |
| return pipe; |
| }}, |
| partial: {get: function() { |
| return partial; |
| }}, |
| curry: {get: function() { |
| return curry; |
| }}, |
| curryRight: {get: function() { |
| return curryRight; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__array__; |
| var arrayReduce = ($__array__ = _dereq_("array"), $__array__ && $__array__.__esModule && $__array__ || {default: $__array__}).arrayReduce; |
| function isFunction(func) { |
| return typeof func === 'function'; |
| } |
| function proxy(func, context) { |
| return function() { |
| return func.apply(context, arguments); |
| }; |
| } |
| function throttle(func) { |
| var wait = arguments[1] !== (void 0) ? arguments[1] : 200; |
| var lastCalled = 0; |
| var result = {lastCallThrottled: true}; |
| var lastTimer = null; |
| function _throttle() { |
| var $__1 = this; |
| var args = arguments; |
| var stamp = Date.now(); |
| var needCall = false; |
| result.lastCallThrottled = true; |
| if (!lastCalled) { |
| lastCalled = stamp; |
| needCall = true; |
| } |
| var remaining = wait - (stamp - lastCalled); |
| if (needCall) { |
| result.lastCallThrottled = false; |
| func.apply(this, args); |
| } else { |
| if (lastTimer) { |
| clearTimeout(lastTimer); |
| } |
| lastTimer = setTimeout((function() { |
| result.lastCallThrottled = false; |
| func.apply($__1, args); |
| lastCalled = 0; |
| lastTimer = void 0; |
| }), remaining); |
| } |
| return result; |
| } |
| return _throttle; |
| } |
| function throttleAfterHits(func) { |
| var wait = arguments[1] !== (void 0) ? arguments[1] : 200; |
| var hits = arguments[2] !== (void 0) ? arguments[2] : 10; |
| var funcThrottle = throttle(func, wait); |
| var remainHits = hits; |
| function _clearHits() { |
| remainHits = hits; |
| } |
| function _throttleAfterHits() { |
| if (remainHits) { |
| remainHits--; |
| return func.apply(this, arguments); |
| } |
| return funcThrottle.apply(this, arguments); |
| } |
| _throttleAfterHits.clearHits = _clearHits; |
| return _throttleAfterHits; |
| } |
| function debounce(func) { |
| var wait = arguments[1] !== (void 0) ? arguments[1] : 200; |
| var lastTimer = null; |
| var result; |
| function _debounce() { |
| var $__1 = this; |
| var args = arguments; |
| if (lastTimer) { |
| clearTimeout(lastTimer); |
| } |
| lastTimer = setTimeout((function() { |
| result = func.apply($__1, args); |
| }), wait); |
| return result; |
| } |
| return _debounce; |
| } |
| function pipe() { |
| for (var functions = [], |
| $__2 = 0; $__2 < arguments.length; $__2++) |
| functions[$__2] = arguments[$__2]; |
| var $__5 = functions, |
| firstFunc = $__5[0], |
| restFunc = Array.prototype.slice.call($__5, 1); |
| return function _pipe() { |
| return arrayReduce(restFunc, (function(acc, fn) { |
| return fn(acc); |
| }), firstFunc.apply(this, arguments)); |
| }; |
| } |
| function partial(func) { |
| for (var params = [], |
| $__3 = 1; $__3 < arguments.length; $__3++) |
| params[$__3 - 1] = arguments[$__3]; |
| return function _partial() { |
| for (var restParams = [], |
| $__4 = 0; $__4 < arguments.length; $__4++) |
| restParams[$__4] = arguments[$__4]; |
| return func.apply(this, params.concat(restParams)); |
| }; |
| } |
| function curry(func) { |
| var argsLength = func.length; |
| function given(argsSoFar) { |
| return function _curry() { |
| for (var params = [], |
| $__4 = 0; $__4 < arguments.length; $__4++) |
| params[$__4] = arguments[$__4]; |
| var passedArgsSoFar = argsSoFar.concat(params); |
| var result; |
| if (passedArgsSoFar.length >= argsLength) { |
| result = func.apply(this, passedArgsSoFar); |
| } else { |
| result = given(passedArgsSoFar); |
| } |
| return result; |
| }; |
| } |
| return given([]); |
| } |
| function curryRight(func) { |
| var argsLength = func.length; |
| function given(argsSoFar) { |
| return function _curry() { |
| for (var params = [], |
| $__4 = 0; $__4 < arguments.length; $__4++) |
| params[$__4] = arguments[$__4]; |
| var passedArgsSoFar = argsSoFar.concat(params.reverse()); |
| var result; |
| if (passedArgsSoFar.length >= argsLength) { |
| result = func.apply(this, passedArgsSoFar); |
| } else { |
| result = given(passedArgsSoFar); |
| } |
| return result; |
| }; |
| } |
| return given([]); |
| } |
| |
| //# |
| },{"array":43}],51:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| stringify: {get: function() { |
| return stringify; |
| }}, |
| isDefined: {get: function() { |
| return isDefined; |
| }}, |
| isUndefined: {get: function() { |
| return isUndefined; |
| }}, |
| __esModule: {value: true} |
| }); |
| function stringify(value) { |
| switch (typeof value) { |
| case 'string': |
| case 'number': |
| return value + ''; |
| case 'object': |
| if (value === null) { |
| return ''; |
| } else { |
| return value.toString(); |
| } |
| break; |
| case 'undefined': |
| return ''; |
| default: |
| return value.toString(); |
| } |
| } |
| function isDefined(variable) { |
| return typeof variable !== 'undefined'; |
| } |
| function isUndefined(variable) { |
| return typeof variable === 'undefined'; |
| } |
| |
| //# |
| },{}],52:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| isNumeric: {get: function() { |
| return isNumeric; |
| }}, |
| rangeEach: {get: function() { |
| return rangeEach; |
| }}, |
| rangeEachReverse: {get: function() { |
| return rangeEachReverse; |
| }}, |
| valueAccordingPercent: {get: function() { |
| return valueAccordingPercent; |
| }}, |
| __esModule: {value: true} |
| }); |
| function isNumeric(n) { |
| var t = typeof n; |
| return t == 'number' ? !isNaN(n) && isFinite(n) : t == 'string' ? !n.length ? false : n.length == 1 ? /\d/.test(n) : /^\s*[+-]?\s*(?:(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?)|(?:0x[a-f\d]+))\s*$/i.test(n) : t == 'object' ? !!n && typeof n.valueOf() == 'number' && !(n instanceof Date) : false; |
| } |
| function rangeEach(rangeFrom, rangeTo, iteratee) { |
| var index = -1; |
| if (typeof rangeTo === 'function') { |
| iteratee = rangeTo; |
| rangeTo = rangeFrom; |
| } else { |
| index = rangeFrom - 1; |
| } |
| while (++index <= rangeTo) { |
| if (iteratee(index) === false) { |
| break; |
| } |
| } |
| } |
| function rangeEachReverse(rangeFrom, rangeTo, iteratee) { |
| var index = rangeFrom + 1; |
| if (typeof rangeTo === 'function') { |
| iteratee = rangeTo; |
| rangeTo = 0; |
| } |
| while (--index >= rangeTo) { |
| if (iteratee(index) === false) { |
| break; |
| } |
| } |
| } |
| function valueAccordingPercent(value, percent) { |
| percent = parseInt(percent.toString().replace('%', ''), 10); |
| percent = parseInt(value * percent / 100); |
| return percent; |
| } |
| |
| //# |
| },{}],53:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| duckSchema: {get: function() { |
| return duckSchema; |
| }}, |
| inherit: {get: function() { |
| return inherit; |
| }}, |
| extend: {get: function() { |
| return extend; |
| }}, |
| deepExtend: {get: function() { |
| return deepExtend; |
| }}, |
| deepClone: {get: function() { |
| return deepClone; |
| }}, |
| clone: {get: function() { |
| return clone; |
| }}, |
| mixin: {get: function() { |
| return mixin; |
| }}, |
| isObjectEquals: {get: function() { |
| return isObjectEquals; |
| }}, |
| isObject: {get: function() { |
| return isObject; |
| }}, |
| getPrototypeOf: {get: function() { |
| return getPrototypeOf; |
| }}, |
| defineGetter: {get: function() { |
| return defineGetter; |
| }}, |
| objectEach: {get: function() { |
| return objectEach; |
| }}, |
| getProperty: {get: function() { |
| return getProperty; |
| }}, |
| deepObjectSize: {get: function() { |
| return deepObjectSize; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__array__; |
| var arrayEach = ($__array__ = _dereq_("array"), $__array__ && $__array__.__esModule && $__array__ || {default: $__array__}).arrayEach; |
| function duckSchema(object) { |
| var schema; |
| if (Array.isArray(object)) { |
| schema = []; |
| } else { |
| schema = {}; |
| objectEach(object, function(value, key) { |
| if (value && typeof value === 'object' && !Array.isArray(value)) { |
| schema[key] = duckSchema(value); |
| } else if (Array.isArray(value)) { |
| if (value.length && typeof value[0] === 'object' && !Array.isArray(value[0])) { |
| schema[key] = [duckSchema(value[0])]; |
| } else { |
| schema[key] = []; |
| } |
| } else { |
| schema[key] = null; |
| } |
| }); |
| } |
| return schema; |
| } |
| function inherit(Child, Parent) { |
| Parent.prototype.constructor = Parent; |
| Child.prototype = new Parent(); |
| Child.prototype.constructor = Child; |
| return Child; |
| } |
| function extend(target, extension) { |
| objectEach(extension, function(value, key) { |
| target[key] = value; |
| }); |
| return target; |
| } |
| function deepExtend(target, extension) { |
| objectEach(extension, function(value, key) { |
| if (extension[key] && typeof extension[key] === 'object') { |
| if (!target[key]) { |
| if (Array.isArray(extension[key])) { |
| target[key] = []; |
| } else if (Object.prototype.toString.call(extension[key]) === '[object Date]') { |
| target[key] = extension[key]; |
| } else { |
| target[key] = {}; |
| } |
| } |
| deepExtend(target[key], extension[key]); |
| } else { |
| target[key] = extension[key]; |
| } |
| }); |
| } |
| function deepClone(obj) { |
| if (typeof obj === 'object') { |
| return JSON.parse(JSON.stringify(obj)); |
| } |
| return obj; |
| } |
| function clone(object) { |
| var result = {}; |
| objectEach(object, (function(value, key) { |
| result[key] = value; |
| })); |
| return result; |
| } |
| function mixin(Base) { |
| for (var mixins = [], |
| $__1 = 1; $__1 < arguments.length; $__1++) |
| mixins[$__1 - 1] = arguments[$__1]; |
| if (!Base.MIXINS) { |
| Base.MIXINS = []; |
| } |
| arrayEach(mixins, (function(mixin) { |
| Base.MIXINS.push(mixin.MIXIN_NAME); |
| objectEach(mixin, (function(value, key) { |
| if (Base.prototype[key] !== void 0) { |
| throw new Error(("Mixin conflict. Property '" + key + "' already exist and cannot be overwritten.")); |
| } |
| if (typeof value === 'function') { |
| Base.prototype[key] = value; |
| } else { |
| var getter = function _getter(propertyName, initialValue) { |
| propertyName = '_' + propertyName; |
| var initValue = (function(value) { |
| if (Array.isArray(value) || isObject(value)) { |
| value = deepClone(value); |
| } |
| return value; |
| }); |
| return function() { |
| if (this[propertyName] === void 0) { |
| this[propertyName] = initValue(initialValue); |
| } |
| return this[propertyName]; |
| }; |
| }; |
| var setter = function _setter(propertyName) { |
| propertyName = '_' + propertyName; |
| return function(value) { |
| this[propertyName] = value; |
| }; |
| }; |
| Object.defineProperty(Base.prototype, key, { |
| get: getter(key, value), |
| set: setter(key), |
| configurable: true |
| }); |
| } |
| })); |
| })); |
| return Base; |
| } |
| function isObjectEquals(object1, object2) { |
| return JSON.stringify(object1) === JSON.stringify(object2); |
| } |
| function isObject(obj) { |
| return Object.prototype.toString.call(obj) == '[object Object]'; |
| } |
| function getPrototypeOf(obj) { |
| var prototype; |
| if (typeof obj.__proto__ == 'object') { |
| prototype = obj.__proto__; |
| } else { |
| var oldConstructor, |
| constructor = obj.constructor; |
| if (typeof obj.constructor == 'function') { |
| oldConstructor = constructor; |
| if (delete obj.constructor) { |
| constructor = obj.constructor; |
| obj.constructor = oldConstructor; |
| } |
| } |
| prototype = constructor ? constructor.prototype : null; |
| } |
| return prototype; |
| } |
| function defineGetter(object, property, value, options) { |
| options.value = value; |
| options.writable = options.writable !== false; |
| options.enumerable = options.enumerable !== false; |
| options.configurable = options.configurable !== false; |
| Object.defineProperty(object, property, options); |
| } |
| function objectEach(object, iteratee) { |
| for (var key in object) { |
| if (!object.hasOwnProperty || (object.hasOwnProperty && object.hasOwnProperty(key))) { |
| if (iteratee(object[key], key, object) === false) { |
| break; |
| } |
| } |
| } |
| return object; |
| } |
| function getProperty(object, name) { |
| var names = name.split('.'); |
| var result = object; |
| objectEach(names, (function(name) { |
| result = result[name]; |
| if (result === void 0) { |
| result = void 0; |
| return false; |
| } |
| })); |
| return result; |
| } |
| function deepObjectSize(object) { |
| if (!isObject(object)) { |
| return 0; |
| } |
| var recursObjLen = function(obj) { |
| var result = 0; |
| if (isObject(obj)) { |
| objectEach(obj, (function(key) { |
| result += recursObjLen(key); |
| })); |
| } else { |
| result++; |
| } |
| return result; |
| }; |
| return recursObjLen(object); |
| } |
| |
| //# |
| },{"array":43}],54:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| columnFactory: {get: function() { |
| return columnFactory; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__object__; |
| var inherit = ($__object__ = _dereq_("object"), $__object__ && $__object__.__esModule && $__object__ || {default: $__object__}).inherit; |
| function columnFactory(GridSettings, conflictList) { |
| function ColumnSettings() {} |
| ; |
| inherit(ColumnSettings, GridSettings); |
| for (var i = 0, |
| len = conflictList.length; i < len; i++) { |
| ColumnSettings.prototype[conflictList[i]] = void 0; |
| } |
| return ColumnSettings; |
| } |
| |
| //# |
| },{"object":53}],55:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| toUpperCaseFirst: {get: function() { |
| return toUpperCaseFirst; |
| }}, |
| startsWith: {get: function() { |
| return startsWith; |
| }}, |
| endsWith: {get: function() { |
| return endsWith; |
| }}, |
| equalsIgnoreCase: {get: function() { |
| return equalsIgnoreCase; |
| }}, |
| randomString: {get: function() { |
| return randomString; |
| }}, |
| isPercentValue: {get: function() { |
| return isPercentValue; |
| }}, |
| substitute: {get: function() { |
| return substitute; |
| }}, |
| padStart: {get: function() { |
| return padStart; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__mixed__, |
| $__number__; |
| var stringify = ($__mixed__ = _dereq_("mixed"), $__mixed__ && $__mixed__.__esModule && $__mixed__ || {default: $__mixed__}).stringify; |
| var rangeEach = ($__number__ = _dereq_("number"), $__number__ && $__number__.__esModule && $__number__ || {default: $__number__}).rangeEach; |
| function toUpperCaseFirst(string) { |
| return string[0].toUpperCase() + string.substr(1); |
| } |
| function startsWith(string, needle) { |
| var result = true; |
| rangeEach(needle.length - 1, (function(index) { |
| if (string.charAt(index) !== needle.charAt(index)) { |
| result = false; |
| return false; |
| } |
| })); |
| return result; |
| } |
| function endsWith(string, needle) { |
| var result = true; |
| var needleLength = needle.length - 1; |
| var stringLength = string.length - 1; |
| rangeEach(needleLength, (function(index) { |
| var stringIndex = stringLength - index; |
| var needleIndex = needleLength - index; |
| if (string.charAt(stringIndex) !== needle.charAt(needleIndex)) { |
| result = false; |
| return false; |
| } |
| })); |
| return result; |
| } |
| function equalsIgnoreCase() { |
| for (var strings = [], |
| $__2 = 0; $__2 < arguments.length; $__2++) |
| strings[$__2] = arguments[$__2]; |
| var unique = []; |
| var length = strings.length; |
| while (length--) { |
| var string = stringify(strings[length]).toLowerCase(); |
| if (unique.indexOf(string) === -1) { |
| unique.push(string); |
| } |
| } |
| return unique.length === 1; |
| } |
| function randomString() { |
| function s4() { |
| return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); |
| } |
| return s4() + s4() + s4() + s4(); |
| } |
| function isPercentValue(value) { |
| return /^([0-9][0-9]?\%$)|(^100\%$)/.test(value); |
| } |
| function substitute(template) { |
| var variables = arguments[1] !== (void 0) ? arguments[1] : {}; |
| return (template + '').replace(/(?:\\)?\[([^\[\]]+)]/g, function(match, name) { |
| if (match.charAt(0) === '\\') { |
| return match.substr(1, match.length - 1); |
| } |
| return variables[name] === void 0 ? '' : variables[name]; |
| }); |
| } |
| function padStart(string, maxLength) { |
| var fillString = arguments[2] !== (void 0) ? arguments[2] : ' '; |
| string = string + ''; |
| if (string.length >= maxLength) { |
| return string; |
| } |
| fillString = String(fillString); |
| var fillStringLength = fillString.length; |
| if (!fillStringLength) { |
| fillString = ' '; |
| } |
| var fillLen = maxLength - string.length; |
| var timesToRepeat = Math.ceil(fillLen / fillString.length); |
| var truncatedString = ''; |
| rangeEach(timesToRepeat, (function(index) { |
| truncatedString += fillString; |
| })); |
| truncatedString = truncatedString.slice(0, fillLen); |
| return truncatedString + string; |
| } |
| ; |
| |
| //# |
| },{"mixed":51,"number":52}],56:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| KEY_CODES: {get: function() { |
| return KEY_CODES; |
| }}, |
| isPrintableChar: {get: function() { |
| return isPrintableChar; |
| }}, |
| isMetaKey: {get: function() { |
| return isMetaKey; |
| }}, |
| isCtrlKey: {get: function() { |
| return isCtrlKey; |
| }}, |
| isKey: {get: function() { |
| return isKey; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__array__; |
| var arrayEach = ($__array__ = _dereq_("array"), $__array__ && $__array__.__esModule && $__array__ || {default: $__array__}).arrayEach; |
| var KEY_CODES = { |
| MOUSE_LEFT: 1, |
| MOUSE_RIGHT: 3, |
| MOUSE_MIDDLE: 2, |
| BACKSPACE: 8, |
| COMMA: 188, |
| INSERT: 45, |
| DELETE: 46, |
| END: 35, |
| ENTER: 13, |
| ESCAPE: 27, |
| CONTROL_LEFT: 91, |
| COMMAND_LEFT: 17, |
| COMMAND_RIGHT: 93, |
| ALT: 18, |
| HOME: 36, |
| PAGE_DOWN: 34, |
| PAGE_UP: 33, |
| PERIOD: 190, |
| SPACE: 32, |
| SHIFT: 16, |
| CAPS_LOCK: 20, |
| TAB: 9, |
| ARROW_RIGHT: 39, |
| ARROW_LEFT: 37, |
| ARROW_UP: 38, |
| ARROW_DOWN: 40, |
| F1: 112, |
| F2: 113, |
| F3: 114, |
| F4: 115, |
| F5: 116, |
| F6: 117, |
| F7: 118, |
| F8: 119, |
| F9: 120, |
| F10: 121, |
| F11: 122, |
| F12: 123, |
| A: 65, |
| X: 88, |
| C: 67, |
| V: 86 |
| }; |
| function isPrintableChar(keyCode) { |
| return ((keyCode == 32) || (keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 111) || (keyCode >= 186 && keyCode <= 192) || (keyCode >= 219 && keyCode <= 222) || keyCode >= 226 || (keyCode >= 65 && keyCode <= 90)); |
| } |
| function isMetaKey(keyCode) { |
| var metaKeys = [KEY_CODES.ARROW_DOWN, KEY_CODES.ARROW_UP, KEY_CODES.ARROW_LEFT, KEY_CODES.ARROW_RIGHT, KEY_CODES.HOME, KEY_CODES.END, KEY_CODES.DELETE, KEY_CODES.BACKSPACE, KEY_CODES.F1, KEY_CODES.F2, KEY_CODES.F3, KEY_CODES.F4, KEY_CODES.F5, KEY_CODES.F6, KEY_CODES.F7, KEY_CODES.F8, KEY_CODES.F9, KEY_CODES.F10, KEY_CODES.F11, KEY_CODES.F12, KEY_CODES.TAB, KEY_CODES.PAGE_DOWN, KEY_CODES.PAGE_UP, KEY_CODES.ENTER, KEY_CODES.ESCAPE, KEY_CODES.SHIFT, KEY_CODES.CAPS_LOCK, KEY_CODES.ALT]; |
| return metaKeys.indexOf(keyCode) !== -1; |
| } |
| function isCtrlKey(keyCode) { |
| return [KEY_CODES.CONTROL_LEFT, 224, KEY_CODES.COMMAND_LEFT, KEY_CODES.COMMAND_RIGHT].indexOf(keyCode) !== -1; |
| } |
| function isKey(keyCode, baseCode) { |
| var keys = baseCode.split('|'); |
| var result = false; |
| arrayEach(keys, function(key) { |
| if (keyCode === KEY_CODES[key]) { |
| result = true; |
| return false; |
| } |
| }); |
| return result; |
| } |
| |
| //# |
| },{"array":43}],57:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| localHooks: {get: function() { |
| return localHooks; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $___46__46__47_helpers_47_array__, |
| $___46__46__47_helpers_47_object__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var arrayEach = ($___46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47_helpers_47_array__ && $___46__46__47_helpers_47_array__.__esModule && $___46__46__47_helpers_47_array__ || {default: $___46__46__47_helpers_47_array__}).arrayEach; |
| var defineGetter = ($___46__46__47_helpers_47_object__ = _dereq_("helpers/object"), $___46__46__47_helpers_47_object__ && $___46__46__47_helpers_47_object__.__esModule && $___46__46__47_helpers_47_object__ || {default: $___46__46__47_helpers_47_object__}).defineGetter; |
| var MIXIN_NAME = 'localHooks'; |
| var localHooks = { |
| _localHooks: Object.create(null), |
| addLocalHook: function(key, callback) { |
| if (!this._localHooks[key]) { |
| this._localHooks[key] = []; |
| } |
| this._localHooks[key].push(callback); |
| }, |
| runLocalHooks: function(key) { |
| for (var params = [], |
| $__4 = 1; $__4 < arguments.length; $__4++) |
| params[$__4 - 1] = arguments[$__4]; |
| var $__3 = this; |
| if (this._localHooks[key]) { |
| arrayEach(this._localHooks[key], (function(callback) { |
| return callback.apply($__3, params); |
| })); |
| } |
| }, |
| clearLocalHooks: function() { |
| this._localHooks = {}; |
| } |
| }; |
| defineGetter(localHooks, 'MIXIN_NAME', MIXIN_NAME, { |
| writable: false, |
| enumerable: false |
| }); |
| ; |
| Handsontable.utils.localHooks = localHooks; |
| |
| //# |
| },{"browser":24,"helpers/array":43,"helpers/object":53}],58:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| MultiMap: {get: function() { |
| return MultiMap; |
| }}, |
| __esModule: {value: true} |
| }); |
| ; |
| window.MultiMap = MultiMap; |
| function MultiMap() { |
| var map = { |
| arrayMap: [], |
| weakMap: new WeakMap() |
| }; |
| return { |
| get: function(key) { |
| if (canBeAnArrayMapKey(key)) { |
| return map.arrayMap[key]; |
| } else if (canBeAWeakMapKey(key)) { |
| return map.weakMap.get(key); |
| } |
| }, |
| set: function(key, value) { |
| if (canBeAnArrayMapKey(key)) { |
| map.arrayMap[key] = value; |
| } else if (canBeAWeakMapKey(key)) { |
| map.weakMap.set(key, value); |
| } else { |
| throw new Error('Invalid key type'); |
| } |
| }, |
| delete: function(key) { |
| if (canBeAnArrayMapKey(key)) { |
| delete map.arrayMap[key]; |
| } else if (canBeAWeakMapKey(key)) { |
| map.weakMap.delete(key); |
| } |
| } |
| }; |
| function canBeAnArrayMapKey(obj) { |
| return obj !== null && !isNaNSymbol(obj) && (typeof obj == 'string' || typeof obj == 'number'); |
| } |
| function canBeAWeakMapKey(obj) { |
| return obj !== null && (typeof obj == 'object' || typeof obj == 'function'); |
| } |
| function isNaNSymbol(obj) { |
| return obj !== obj; |
| } |
| } |
| |
| //# |
| },{}],59:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| Hooks: {get: function() { |
| return Hooks; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__helpers_47_array__, |
| $__helpers_47_object__; |
| var REGISTERED_HOOKS = ['afterCellMetaReset', 'afterChange', 'afterChangesObserved', 'afterContextMenuDefaultOptions', 'afterContextMenuHide', 'afterContextMenuShow', 'afterCopyLimit', 'afterCreateCol', 'afterCreateRow', 'afterDeselect', 'afterDestroy', 'afterDocumentKeyDown', 'afterGetCellMeta', 'afterGetColHeader', 'afterGetRowHeader', 'afterInit', 'afterLoadData', 'afterMomentumScroll', 'afterOnCellCornerMouseDown', 'afterOnCellMouseDown', 'afterOnCellMouseOver', 'afterRemoveCol', 'afterRemoveRow', 'afterRender', 'beforeRenderer', 'afterRenderer', 'afterScrollHorizontally', 'afterScrollVertically', 'afterSelection', 'afterSelectionByProp', 'afterSelectionEnd', 'afterSelectionEndByProp', 'afterSetCellMeta', 'afterUpdateSettings', 'afterValidate', 'beforeAutofill', 'beforeCellAlignment', 'beforeChange', 'beforeChangeRender', 'beforeDrawBorders', 'beforeGetCellMeta', 'beforeInit', 'beforeInitWalkontable', 'beforeKeyDown', 'beforeOnCellMouseDown', 'beforeOnCellMouseOver', 'beforeRemoveCol', 'beforeRemoveRow', 'beforeRender', 'beforeSetRangeStart', 'beforeSetRangeEnd', 'beforeTouchScroll', 'beforeValidate', 'construct', 'init', 'modifyCol', 'unmodifyCol', 'modifyColHeader', 'modifyColWidth', 'modifyRow', 'modifyRowHeader', 'modifyRowHeight', 'persistentStateLoad', 'persistentStateReset', 'persistentStateSave', 'beforeColumnSort', 'afterColumnSort', 'afterAutofillApplyValues', 'modifyCopyableRange', 'beforeColumnMove', 'afterColumnMove', 'beforeRowMove', 'afterRowMove', 'beforeColumnResize', 'afterColumnResize', 'beforeRowResize', 'afterRowResize', 'afterGetColumnHeaderRenderers', 'afterGetRowHeaderRenderers', 'beforeStretchingColumnWidth', 'beforeFilter', 'afterFilter', 'modifyColumnHeaderHeight']; |
| var arrayEach = ($__helpers_47_array__ = _dereq_("helpers/array"), $__helpers_47_array__ && $__helpers_47_array__.__esModule && $__helpers_47_array__ || {default: $__helpers_47_array__}).arrayEach; |
| var objectEach = ($__helpers_47_object__ = _dereq_("helpers/object"), $__helpers_47_object__ && $__helpers_47_object__.__esModule && $__helpers_47_object__ || {default: $__helpers_47_object__}).objectEach; |
| var Hooks = function Hooks() { |
| this.globalBucket = this.createEmptyBucket(); |
| }; |
| ($traceurRuntime.createClass)(Hooks, { |
| createEmptyBucket: function() { |
| var bucket = Object.create(null); |
| arrayEach(REGISTERED_HOOKS, (function(hook) { |
| return (bucket[hook] = []); |
| })); |
| return bucket; |
| }, |
| getBucket: function() { |
| var context = arguments[0] !== (void 0) ? arguments[0] : null; |
| if (context) { |
| if (!context.pluginHookBucket) { |
| context.pluginHookBucket = this.createEmptyBucket(); |
| } |
| return context.pluginHookBucket; |
| } |
| return this.globalBucket; |
| }, |
| add: function(key, callback) { |
| var context = arguments[2] !== (void 0) ? arguments[2] : null; |
| var $__2 = this; |
| if (Array.isArray(callback)) { |
| arrayEach(callback, (function(c) { |
| return $__2.add(key, c, context); |
| })); |
| } else { |
| var bucket = this.getBucket(context); |
| if (typeof bucket[key] === 'undefined') { |
| this.register(key); |
| bucket[key] = []; |
| } |
| callback.skip = false; |
| if (bucket[key].indexOf(callback) === -1) { |
| bucket[key].push(callback); |
| } |
| } |
| return this; |
| }, |
| once: function(key, callback) { |
| var context = arguments[2] !== (void 0) ? arguments[2] : null; |
| var $__2 = this; |
| if (Array.isArray(callback)) { |
| arrayEach(callback, (function(c) { |
| return $__2.once(key, c, context); |
| })); |
| } else { |
| callback.runOnce = true; |
| this.add(key, callback, context); |
| } |
| }, |
| remove: function(key, callback) { |
| var context = arguments[2] !== (void 0) ? arguments[2] : null; |
| var bucket = this.getBucket(context); |
| if (typeof bucket[key] !== 'undefined') { |
| if (bucket[key].indexOf(callback) >= 0) { |
| callback.skip = true; |
| return true; |
| } |
| } |
| return false; |
| }, |
| has: function(key) { |
| var context = arguments[1] !== (void 0) ? arguments[1] : null; |
| var bucket = this.getBucket(context); |
| return bucket[key] !== void 0 && bucket[key].length ? true : false; |
| }, |
| run: function(context, key, p1, p2, p3, p4, p5, p6) { |
| { |
| var globalHandlers = this.globalBucket[key]; |
| var index = -1; |
| var length = globalHandlers ? globalHandlers.length : 0; |
| if (length) { |
| while (++index < length) { |
| if (!globalHandlers[index] || globalHandlers[index].skip) { |
| continue; |
| } |
| var res = globalHandlers[index].call(context, p1, p2, p3, p4, p5, p6); |
| if (res !== void 0) { |
| p1 = res; |
| } |
| if (globalHandlers[index] && globalHandlers[index].runOnce) { |
| this.remove(key, globalHandlers[index]); |
| } |
| } |
| } |
| } |
| { |
| var localHandlers = this.getBucket(context)[key]; |
| var index$__4 = -1; |
| var length$__5 = localHandlers ? localHandlers.length : 0; |
| if (length$__5) { |
| while (++index$__4 < length$__5) { |
| if (!localHandlers[index$__4] || localHandlers[index$__4].skip) { |
| continue; |
| } |
| var res$__6 = localHandlers[index$__4].call(context, p1, p2, p3, p4, p5, p6); |
| if (res$__6 !== void 0) { |
| p1 = res$__6; |
| } |
| if (localHandlers[index$__4] && localHandlers[index$__4].runOnce) { |
| this.remove(key, localHandlers[index$__4], context); |
| } |
| } |
| } |
| } |
| return p1; |
| }, |
| destroy: function() { |
| var context = arguments[0] !== (void 0) ? arguments[0] : null; |
| objectEach(this.getBucket(context), (function(value, key, bucket) { |
| return (bucket[key].length = 0); |
| })); |
| }, |
| register: function(key) { |
| if (!this.isRegistered(key)) { |
| REGISTERED_HOOKS.push(key); |
| } |
| }, |
| deregister: function(key) { |
| if (this.isRegistered(key)) { |
| REGISTERED_HOOKS.splice(REGISTERED_HOOKS.indexOf(key), 1); |
| } |
| }, |
| isRegistered: function(key) { |
| return REGISTERED_HOOKS.indexOf(key) >= 0; |
| }, |
| getRegistered: function() { |
| return REGISTERED_HOOKS; |
| } |
| }, {}); |
| ; |
| |
| //# |
| },{"helpers/array":43,"helpers/object":53}],60:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| registerPlugin: {get: function() { |
| return registerPlugin; |
| }}, |
| getPlugin: {get: function() { |
| return getPlugin; |
| }}, |
| getRegistredPluginNames: {get: function() { |
| return getRegistredPluginNames; |
| }}, |
| getPluginName: {get: function() { |
| return getPluginName; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__browser__, |
| $__helpers_47_object__, |
| $__helpers_47_string__; |
| var Handsontable = ($__browser__ = _dereq_("browser"), $__browser__ && $__browser__.__esModule && $__browser__ || {default: $__browser__}).default; |
| var objectEach = ($__helpers_47_object__ = _dereq_("helpers/object"), $__helpers_47_object__ && $__helpers_47_object__.__esModule && $__helpers_47_object__ || {default: $__helpers_47_object__}).objectEach; |
| var toUpperCaseFirst = ($__helpers_47_string__ = _dereq_("helpers/string"), $__helpers_47_string__ && $__helpers_47_string__.__esModule && $__helpers_47_string__ || {default: $__helpers_47_string__}).toUpperCaseFirst; |
| var registeredPlugins = new WeakMap(); |
| function registerPlugin(pluginName, PluginClass) { |
| pluginName = toUpperCaseFirst(pluginName); |
| Handsontable.plugins[pluginName] = PluginClass; |
| Handsontable.hooks.add('construct', function() { |
| var holder; |
| if (!registeredPlugins.has(this)) { |
| registeredPlugins.set(this, {}); |
| } |
| holder = registeredPlugins.get(this); |
| if (!holder[pluginName]) { |
| holder[pluginName] = new PluginClass(this); |
| } |
| }); |
| Handsontable.hooks.add('afterDestroy', function() { |
| if (registeredPlugins.has(this)) { |
| var pluginsHolder = registeredPlugins.get(this); |
| objectEach(pluginsHolder, (function(plugin) { |
| return plugin.destroy(); |
| })); |
| registeredPlugins.delete(this); |
| } |
| }); |
| } |
| function getPlugin(instance, pluginName) { |
| if (typeof pluginName != 'string') { |
| throw Error('Only strings can be passed as "plugin" parameter'); |
| } |
| var _pluginName = toUpperCaseFirst(pluginName); |
| if (!registeredPlugins.has(instance) || !registeredPlugins.get(instance)[_pluginName]) { |
| return void 0; |
| } |
| return registeredPlugins.get(instance)[_pluginName]; |
| } |
| function getRegistredPluginNames(hotInstance) { |
| return registeredPlugins.has(hotInstance) ? Object.keys(registeredPlugins.get(hotInstance)) : []; |
| } |
| function getPluginName(hotInstance, plugin) { |
| var pluginName = null; |
| if (registeredPlugins.has(hotInstance)) { |
| objectEach(registeredPlugins.get(hotInstance), (function(pluginInstance, name) { |
| if (pluginInstance === plugin) { |
| pluginName = name; |
| } |
| })); |
| } |
| return pluginName; |
| } |
| ; |
| |
| //# |
| },{"browser":24,"helpers/object":53,"helpers/string":55}],61:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| default: {get: function() { |
| return $__default; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $___46__46__47_helpers_47_object__, |
| $___46__46__47_helpers_47_array__, |
| $___46__46__47_plugins__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47_helpers_47_object__ = _dereq_("helpers/object"), $___46__46__47_helpers_47_object__ && $___46__46__47_helpers_47_object__.__esModule && $___46__46__47_helpers_47_object__ || {default: $___46__46__47_helpers_47_object__}), |
| defineGetter = $__1.defineGetter, |
| objectEach = $__1.objectEach; |
| var arrayEach = ($___46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47_helpers_47_array__ && $___46__46__47_helpers_47_array__.__esModule && $___46__46__47_helpers_47_array__ || {default: $___46__46__47_helpers_47_array__}).arrayEach; |
| var $__3 = ($___46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47_plugins__ && $___46__46__47_plugins__.__esModule && $___46__46__47_plugins__ || {default: $___46__46__47_plugins__}), |
| getRegistredPluginNames = $__3.getRegistredPluginNames, |
| getPluginName = $__3.getPluginName; |
| var privatePool = new WeakMap(); |
| var initializedPlugins = null; |
| var BasePlugin = function BasePlugin(hotInstance) { |
| var $__4 = this; |
| defineGetter(this, 'hot', hotInstance, {writable: false}); |
| privatePool.set(this, {hooks: {}}); |
| initializedPlugins = null; |
| this.pluginName = null; |
| this.pluginsInitializedCallbacks = []; |
| this.isPluginsReady = false; |
| this.enabled = false; |
| this.initialized = false; |
| this.hot.addHook('afterPluginsInitialized', (function() { |
| return $__4.onAfterPluginsInitialized(); |
| })); |
| this.hot.addHook('afterUpdateSettings', (function() { |
| return $__4.onUpdateSettings(); |
| })); |
| this.hot.addHook('beforeInit', (function() { |
| return $__4.init(); |
| })); |
| }; |
| ($traceurRuntime.createClass)(BasePlugin, { |
| init: function() { |
| this.pluginName = getPluginName(this.hot, this); |
| if (this.isEnabled && this.isEnabled()) { |
| this.enablePlugin(); |
| } |
| if (!initializedPlugins) { |
| initializedPlugins = getRegistredPluginNames(this.hot); |
| } |
| if (initializedPlugins.indexOf(this.pluginName) >= 0) { |
| initializedPlugins.splice(initializedPlugins.indexOf(this.pluginName), 1); |
| } |
| if (!initializedPlugins.length) { |
| this.hot.runHooks('afterPluginsInitialized'); |
| } |
| this.initialized = true; |
| }, |
| enablePlugin: function() { |
| this.enabled = true; |
| }, |
| disablePlugin: function() { |
| if (this.eventManager) { |
| this.eventManager.clear(); |
| } |
| this.clearHooks(); |
| this.enabled = false; |
| }, |
| addHook: function(name, callback) { |
| var hooks = privatePool.get(this).hooks[name] = (privatePool.get(this).hooks[name] || []); |
| this.hot.addHook(name, callback); |
| hooks.push(callback); |
| privatePool.get(this).hooks[name] = hooks; |
| }, |
| removeHooks: function(name) { |
| var $__4 = this; |
| arrayEach(privatePool.get(this).hooks[name] || [], (function(callback) { |
| $__4.hot.removeHook(name, callback); |
| })); |
| }, |
| clearHooks: function() { |
| var $__4 = this; |
| var hooks = privatePool.get(this).hooks; |
| objectEach(hooks, (function(callbacks, name) { |
| return $__4.removeHooks(name); |
| })); |
| hooks.length = 0; |
| }, |
| callOnPluginsReady: function(callback) { |
| if (this.isPluginsReady) { |
| callback(); |
| } else { |
| this.pluginsInitializedCallbacks.push(callback); |
| } |
| }, |
| onAfterPluginsInitialized: function() { |
| arrayEach(this.pluginsInitializedCallbacks, (function(callback) { |
| return callback(); |
| })); |
| this.pluginsInitializedCallbacks.length = 0; |
| this.isPluginsReady = true; |
| }, |
| onUpdateSettings: function() { |
| if (this.isEnabled) { |
| if (this.enabled && !this.isEnabled()) { |
| this.disablePlugin(); |
| } |
| if (!this.enabled && this.isEnabled()) { |
| this.enablePlugin(); |
| } |
| if (this.enabled && this.isEnabled()) { |
| this.updatePlugin(); |
| } |
| } |
| }, |
| updatePlugin: function() {}, |
| destroy: function() { |
| var $__4 = this; |
| if (this.eventManager) { |
| this.eventManager.destroy(); |
| } |
| this.clearHooks(); |
| objectEach(this, (function(value, property) { |
| if (property !== 'hot') { |
| $__4[property] = null; |
| } |
| })); |
| delete this.hot; |
| } |
| }, {}); |
| var $__default = BasePlugin; |
| Handsontable.plugins.BasePlugin = BasePlugin; |
| |
| //# |
| },{"browser":24,"helpers/array":43,"helpers/object":53,"plugins":60}],62:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| AutoColumnSize: {get: function() { |
| return AutoColumnSize; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__95_base__, |
| $___46__46__47__46__46__47_helpers_47_array__, |
| $___46__46__47__46__46__47_helpers_47_feature__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47_utils_47_ghostTable__, |
| $___46__46__47__46__46__47_helpers_47_object__, |
| $___46__46__47__46__46__47_helpers_47_number__, |
| $___46__46__47__46__46__47_plugins__, |
| $___46__46__47__46__46__47_utils_47_samplesGenerator__, |
| $___46__46__47__46__46__47_helpers_47_string__, |
| $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_calculator_47_viewportColumns__; |
| var BasePlugin = ($___46__46__47__95_base__ = _dereq_("_base"), $___46__46__47__95_base__ && $___46__46__47__95_base__.__esModule && $___46__46__47__95_base__ || {default: $___46__46__47__95_base__}).default; |
| var $__1 = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}), |
| arrayEach = $__1.arrayEach, |
| arrayFilter = $__1.arrayFilter; |
| var $__2 = ($___46__46__47__46__46__47_helpers_47_feature__ = _dereq_("helpers/feature"), $___46__46__47__46__46__47_helpers_47_feature__ && $___46__46__47__46__46__47_helpers_47_feature__.__esModule && $___46__46__47__46__46__47_helpers_47_feature__ || {default: $___46__46__47__46__46__47_helpers_47_feature__}), |
| cancelAnimationFrame = $__2.cancelAnimationFrame, |
| requestAnimationFrame = $__2.requestAnimationFrame; |
| var isVisible = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}).isVisible; |
| var GhostTable = ($___46__46__47__46__46__47_utils_47_ghostTable__ = _dereq_("utils/ghostTable"), $___46__46__47__46__46__47_utils_47_ghostTable__ && $___46__46__47__46__46__47_utils_47_ghostTable__.__esModule && $___46__46__47__46__46__47_utils_47_ghostTable__ || {default: $___46__46__47__46__46__47_utils_47_ghostTable__}).GhostTable; |
| var $__5 = ($___46__46__47__46__46__47_helpers_47_object__ = _dereq_("helpers/object"), $___46__46__47__46__46__47_helpers_47_object__ && $___46__46__47__46__46__47_helpers_47_object__.__esModule && $___46__46__47__46__46__47_helpers_47_object__ || {default: $___46__46__47__46__46__47_helpers_47_object__}), |
| isObject = $__5.isObject, |
| objectEach = $__5.objectEach; |
| var $__6 = ($___46__46__47__46__46__47_helpers_47_number__ = _dereq_("helpers/number"), $___46__46__47__46__46__47_helpers_47_number__ && $___46__46__47__46__46__47_helpers_47_number__.__esModule && $___46__46__47__46__46__47_helpers_47_number__ || {default: $___46__46__47__46__46__47_helpers_47_number__}), |
| valueAccordingPercent = $__6.valueAccordingPercent, |
| rangeEach = $__6.rangeEach; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var SamplesGenerator = ($___46__46__47__46__46__47_utils_47_samplesGenerator__ = _dereq_("utils/samplesGenerator"), $___46__46__47__46__46__47_utils_47_samplesGenerator__ && $___46__46__47__46__46__47_utils_47_samplesGenerator__.__esModule && $___46__46__47__46__46__47_utils_47_samplesGenerator__ || {default: $___46__46__47__46__46__47_utils_47_samplesGenerator__}).SamplesGenerator; |
| var isPercentValue = ($___46__46__47__46__46__47_helpers_47_string__ = _dereq_("helpers/string"), $___46__46__47__46__46__47_helpers_47_string__ && $___46__46__47__46__46__47_helpers_47_string__.__esModule && $___46__46__47__46__46__47_helpers_47_string__ || {default: $___46__46__47__46__46__47_helpers_47_string__}).isPercentValue; |
| var WalkontableViewportColumnsCalculator = ($___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_calculator_47_viewportColumns__ = _dereq_("3rdparty/walkontable/src/calculator/viewportColumns"), $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_calculator_47_viewportColumns__ && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_calculator_47_viewportColumns__.__esModule && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_calculator_47_viewportColumns__ || {default: $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_calculator_47_viewportColumns__}).WalkontableViewportColumnsCalculator; |
| var AutoColumnSize = function AutoColumnSize(hotInstance) { |
| var $__11 = this; |
| $traceurRuntime.superConstructor($AutoColumnSize).call(this, hotInstance); |
| this.widths = []; |
| this.ghostTable = new GhostTable(this.hot); |
| this.samplesGenerator = new SamplesGenerator((function(row, col) { |
| return $__11.hot.getDataAtCell(row, col); |
| })); |
| this.firstCalculation = true; |
| this.inProgress = false; |
| this.addHook('beforeColumnResize', (function(col, size, isDblClick) { |
| return $__11.onBeforeColumnResize(col, size, isDblClick); |
| })); |
| }; |
| var $AutoColumnSize = AutoColumnSize; |
| ($traceurRuntime.createClass)(AutoColumnSize, { |
| isEnabled: function() { |
| return this.hot.getSettings().autoColumnSize !== false && !this.hot.getSettings().colWidths; |
| }, |
| enablePlugin: function() { |
| var $__11 = this; |
| if (this.enabled) { |
| return; |
| } |
| var setting = this.hot.getSettings().autoColumnSize; |
| var samplingRatio = setting && setting.hasOwnProperty('samplingRatio') ? this.hot.getSettings().autoColumnSize.samplingRatio : void 0; |
| if (samplingRatio && !isNaN(samplingRatio)) { |
| this.samplesGenerator.customSampleCount = parseInt(samplingRatio, 10); |
| } |
| if (setting && setting.useHeaders != null) { |
| this.ghostTable.setSetting('useHeaders', setting.useHeaders); |
| } |
| this.addHook('afterLoadData', (function() { |
| return $__11.onAfterLoadData(); |
| })); |
| this.addHook('beforeChange', (function(changes) { |
| return $__11.onBeforeChange(changes); |
| })); |
| this.addHook('beforeRender', (function(force) { |
| return $__11.onBeforeRender(force); |
| })); |
| this.addHook('modifyColWidth', (function(width, col) { |
| return $__11.getColumnWidth(col, width); |
| })); |
| $traceurRuntime.superGet(this, $AutoColumnSize.prototype, "enablePlugin").call(this); |
| }, |
| disablePlugin: function() { |
| $traceurRuntime.superGet(this, $AutoColumnSize.prototype, "disablePlugin").call(this); |
| }, |
| calculateColumnsWidth: function() { |
| var colRange = arguments[0] !== (void 0) ? arguments[0] : { |
| from: 0, |
| to: this.hot.countCols() - 1 |
| }; |
| var rowRange = arguments[1] !== (void 0) ? arguments[1] : { |
| from: 0, |
| to: this.hot.countRows() - 1 |
| }; |
| var force = arguments[2] !== (void 0) ? arguments[2] : false; |
| var $__11 = this; |
| if (typeof colRange === 'number') { |
| colRange = { |
| from: colRange, |
| to: colRange |
| }; |
| } |
| if (typeof rowRange === 'number') { |
| rowRange = { |
| from: rowRange, |
| to: rowRange |
| }; |
| } |
| rangeEach(colRange.from, colRange.to, (function(col) { |
| if (force || ($__11.widths[col] === void 0 && !$__11.hot._getColWidthFromSettings(col))) { |
| var samples = $__11.samplesGenerator.generateColumnSamples(col, rowRange); |
| samples.forEach((function(sample, col) { |
| return $__11.ghostTable.addColumn(col, sample); |
| })); |
| } |
| })); |
| if (this.ghostTable.columns.length) { |
| this.ghostTable.getWidths((function(col, width) { |
| return $__11.widths[col] = width; |
| })); |
| this.ghostTable.clean(); |
| } |
| }, |
| calculateAllColumnsWidth: function() { |
| var rowRange = arguments[0] !== (void 0) ? arguments[0] : { |
| from: 0, |
| to: this.hot.countRows() - 1 |
| }; |
| var $__11 = this; |
| var current = 0; |
| var length = this.hot.countCols() - 1; |
| var timer = null; |
| this.inProgress = true; |
| var loop = (function() { |
| if (!$__11.hot) { |
| cancelAnimationFrame(timer); |
| $__11.inProgress = false; |
| return; |
| } |
| $__11.calculateColumnsWidth({ |
| from: current, |
| to: Math.min(current + $AutoColumnSize.CALCULATION_STEP, length) |
| }, rowRange); |
| current = current + $AutoColumnSize.CALCULATION_STEP + 1; |
| if (current < length) { |
| timer = requestAnimationFrame(loop); |
| } else { |
| cancelAnimationFrame(timer); |
| $__11.inProgress = false; |
| $__11.hot.view.wt.wtOverlays.adjustElementsSize(true); |
| if ($__11.hot.view.wt.wtOverlays.leftOverlay.needFullRender) { |
| $__11.hot.view.wt.wtOverlays.leftOverlay.clone.draw(); |
| } |
| } |
| }); |
| if (this.firstCalculation && this.getSyncCalculationLimit()) { |
| this.calculateColumnsWidth({ |
| from: 0, |
| to: this.getSyncCalculationLimit() |
| }, rowRange); |
| this.firstCalculation = false; |
| current = this.getSyncCalculationLimit() + 1; |
| } |
| if (current < length) { |
| loop(); |
| } else { |
| this.inProgress = false; |
| } |
| }, |
| recalculateAllColumnsWidth: function() { |
| if (this.hot.view && isVisible(this.hot.view.wt.wtTable.TABLE)) { |
| this.clearCache(); |
| this.calculateAllColumnsWidth(); |
| } |
| }, |
| getSyncCalculationLimit: function() { |
| var limit = $AutoColumnSize.SYNC_CALCULATION_LIMIT; |
| var colsLimit = this.hot.countCols() - 1; |
| if (isObject(this.hot.getSettings().autoColumnSize)) { |
| limit = this.hot.getSettings().autoColumnSize.syncLimit; |
| if (isPercentValue(limit)) { |
| limit = valueAccordingPercent(colsLimit, limit); |
| } else { |
| limit = limit >> 0; |
| } |
| } |
| return Math.min(limit, colsLimit); |
| }, |
| getColumnWidth: function(col) { |
| var defaultWidth = arguments[1]; |
| var keepMinimum = arguments[2] !== (void 0) ? arguments[2] : true; |
| var width = defaultWidth; |
| if (width === void 0) { |
| width = this.widths[col]; |
| if (keepMinimum && typeof width === 'number') { |
| width = Math.max(width, WalkontableViewportColumnsCalculator.DEFAULT_WIDTH); |
| } |
| } |
| return width; |
| }, |
| getFirstVisibleColumn: function() { |
| var wot = this.hot.view.wt; |
| if (wot.wtViewport.columnsVisibleCalculator) { |
| return wot.wtTable.getFirstVisibleColumn(); |
| } |
| if (wot.wtViewport.columnsRenderCalculator) { |
| return wot.wtTable.getFirstRenderedColumn(); |
| } |
| return -1; |
| }, |
| getLastVisibleColumn: function() { |
| var wot = this.hot.view.wt; |
| if (wot.wtViewport.columnsVisibleCalculator) { |
| return wot.wtTable.getLastVisibleColumn(); |
| } |
| if (wot.wtViewport.columnsRenderCalculator) { |
| return wot.wtTable.getLastRenderedColumn(); |
| } |
| return -1; |
| }, |
| clearCache: function() { |
| this.widths.length = 0; |
| }, |
| isNeedRecalculate: function() { |
| return arrayFilter(this.widths, (function(item) { |
| return (item === void 0); |
| })).length ? true : false; |
| }, |
| onBeforeRender: function() { |
| var force = this.hot.renderCall; |
| var rowsCount = this.hot.countRows(); |
| if (!rowsCount) { |
| return; |
| } |
| this.calculateColumnsWidth({ |
| from: this.getFirstVisibleColumn(), |
| to: this.getLastVisibleColumn() |
| }, void 0, force); |
| if (this.isNeedRecalculate() && !this.inProgress) { |
| this.calculateAllColumnsWidth(); |
| } |
| }, |
| onAfterLoadData: function() { |
| var $__11 = this; |
| if (this.hot.view) { |
| this.recalculateAllColumnsWidth(); |
| } else { |
| setTimeout((function() { |
| if ($__11.hot) { |
| $__11.recalculateAllColumnsWidth(); |
| } |
| }), 0); |
| } |
| }, |
| onBeforeChange: function(changes) { |
| var $__11 = this; |
| arrayEach(changes, (function(data) { |
| return $__11.widths[$__11.hot.propToCol(data[1])] = void 0; |
| })); |
| }, |
| onBeforeColumnResize: function(col, size, isDblClick) { |
| if (isDblClick) { |
| this.calculateColumnsWidth(col, void 0, true); |
| size = this.getColumnWidth(col, void 0, false); |
| } |
| return size; |
| }, |
| destroy: function() { |
| this.ghostTable.clean(); |
| $traceurRuntime.superGet(this, $AutoColumnSize.prototype, "destroy").call(this); |
| } |
| }, { |
| get CALCULATION_STEP() { |
| return 50; |
| }, |
| get SYNC_CALCULATION_LIMIT() { |
| return 50; |
| } |
| }, BasePlugin); |
| ; |
| registerPlugin('autoColumnSize', AutoColumnSize); |
| |
| //# |
| },{"3rdparty/walkontable/src/calculator/viewportColumns":4,"_base":61,"helpers/array":43,"helpers/dom/element":47,"helpers/feature":49,"helpers/number":52,"helpers/object":53,"helpers/string":55,"plugins":60,"utils/ghostTable":115,"utils/samplesGenerator":117}],63:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| AutoRowSize: {get: function() { |
| return AutoRowSize; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__95_base__, |
| $___46__46__47__46__46__47_helpers_47_array__, |
| $___46__46__47__46__46__47_helpers_47_feature__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47_utils_47_ghostTable__, |
| $___46__46__47__46__46__47_helpers_47_object__, |
| $___46__46__47__46__46__47_helpers_47_number__, |
| $___46__46__47__46__46__47_plugins__, |
| $___46__46__47__46__46__47_utils_47_samplesGenerator__, |
| $___46__46__47__46__46__47_helpers_47_string__; |
| var BasePlugin = ($___46__46__47__95_base__ = _dereq_("_base"), $___46__46__47__95_base__ && $___46__46__47__95_base__.__esModule && $___46__46__47__95_base__ || {default: $___46__46__47__95_base__}).default; |
| var $__1 = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}), |
| arrayEach = $__1.arrayEach, |
| arrayFilter = $__1.arrayFilter; |
| var $__2 = ($___46__46__47__46__46__47_helpers_47_feature__ = _dereq_("helpers/feature"), $___46__46__47__46__46__47_helpers_47_feature__ && $___46__46__47__46__46__47_helpers_47_feature__.__esModule && $___46__46__47__46__46__47_helpers_47_feature__ || {default: $___46__46__47__46__46__47_helpers_47_feature__}), |
| cancelAnimationFrame = $__2.cancelAnimationFrame, |
| requestAnimationFrame = $__2.requestAnimationFrame; |
| var isVisible = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}).isVisible; |
| var GhostTable = ($___46__46__47__46__46__47_utils_47_ghostTable__ = _dereq_("utils/ghostTable"), $___46__46__47__46__46__47_utils_47_ghostTable__ && $___46__46__47__46__46__47_utils_47_ghostTable__.__esModule && $___46__46__47__46__46__47_utils_47_ghostTable__ || {default: $___46__46__47__46__46__47_utils_47_ghostTable__}).GhostTable; |
| var $__5 = ($___46__46__47__46__46__47_helpers_47_object__ = _dereq_("helpers/object"), $___46__46__47__46__46__47_helpers_47_object__ && $___46__46__47__46__46__47_helpers_47_object__.__esModule && $___46__46__47__46__46__47_helpers_47_object__ || {default: $___46__46__47__46__46__47_helpers_47_object__}), |
| isObject = $__5.isObject, |
| objectEach = $__5.objectEach; |
| var $__6 = ($___46__46__47__46__46__47_helpers_47_number__ = _dereq_("helpers/number"), $___46__46__47__46__46__47_helpers_47_number__ && $___46__46__47__46__46__47_helpers_47_number__.__esModule && $___46__46__47__46__46__47_helpers_47_number__ || {default: $___46__46__47__46__46__47_helpers_47_number__}), |
| valueAccordingPercent = $__6.valueAccordingPercent, |
| rangeEach = $__6.rangeEach; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var SamplesGenerator = ($___46__46__47__46__46__47_utils_47_samplesGenerator__ = _dereq_("utils/samplesGenerator"), $___46__46__47__46__46__47_utils_47_samplesGenerator__ && $___46__46__47__46__46__47_utils_47_samplesGenerator__.__esModule && $___46__46__47__46__46__47_utils_47_samplesGenerator__ || {default: $___46__46__47__46__46__47_utils_47_samplesGenerator__}).SamplesGenerator; |
| var isPercentValue = ($___46__46__47__46__46__47_helpers_47_string__ = _dereq_("helpers/string"), $___46__46__47__46__46__47_helpers_47_string__ && $___46__46__47__46__46__47_helpers_47_string__.__esModule && $___46__46__47__46__46__47_helpers_47_string__ || {default: $___46__46__47__46__46__47_helpers_47_string__}).isPercentValue; |
| var AutoRowSize = function AutoRowSize(hotInstance) { |
| var $__10 = this; |
| $traceurRuntime.superConstructor($AutoRowSize).call(this, hotInstance); |
| this.heights = []; |
| this.ghostTable = new GhostTable(this.hot); |
| this.samplesGenerator = new SamplesGenerator((function(row, col) { |
| if (row >= 0) { |
| return $__10.hot.getDataAtCell(row, col); |
| } else if (row === -1) { |
| return $__10.hot.getColHeader(col); |
| } else { |
| return null; |
| } |
| })); |
| this.firstCalculation = true; |
| this.inProgress = false; |
| this.addHook('beforeRowResize', (function(row, size, isDblClick) { |
| return $__10.onBeforeRowResize(row, size, isDblClick); |
| })); |
| }; |
| var $AutoRowSize = AutoRowSize; |
| ($traceurRuntime.createClass)(AutoRowSize, { |
| isEnabled: function() { |
| return this.hot.getSettings().autoRowSize === true || isObject(this.hot.getSettings().autoRowSize); |
| }, |
| enablePlugin: function() { |
| var $__10 = this; |
| if (this.enabled) { |
| return; |
| } |
| var setting = this.hot.getSettings().autoRowSize; |
| var samplingRatio = setting && setting.hasOwnProperty('samplingRatio') ? this.hot.getSettings().autoRowSize.samplingRatio : void 0; |
| if (samplingRatio && !isNaN(samplingRatio)) { |
| this.samplesGenerator.customSampleCount = parseInt(samplingRatio, 10); |
| } |
| this.addHook('afterLoadData', (function() { |
| return $__10.onAfterLoadData(); |
| })); |
| this.addHook('beforeChange', (function(changes) { |
| return $__10.onBeforeChange(changes); |
| })); |
| this.addHook('beforeColumnMove', (function() { |
| return $__10.recalculateAllRowsHeight(); |
| })); |
| this.addHook('beforeColumnResize', (function() { |
| return $__10.recalculateAllRowsHeight(); |
| })); |
| this.addHook('beforeColumnSort', (function() { |
| return $__10.clearCache(); |
| })); |
| this.addHook('beforeRender', (function(force) { |
| return $__10.onBeforeRender(force); |
| })); |
| this.addHook('beforeRowMove', (function(rowStart, rowEnd) { |
| return $__10.onBeforeRowMove(rowStart, rowEnd); |
| })); |
| this.addHook('modifyRowHeight', (function(height, row) { |
| return $__10.getRowHeight(row, height); |
| })); |
| this.addHook('modifyColumnHeaderHeight', (function() { |
| return $__10.getColumnHeaderHeight(); |
| })); |
| $traceurRuntime.superGet(this, $AutoRowSize.prototype, "enablePlugin").call(this); |
| }, |
| disablePlugin: function() { |
| $traceurRuntime.superGet(this, $AutoRowSize.prototype, "disablePlugin").call(this); |
| }, |
| calculateRowsHeight: function() { |
| var rowRange = arguments[0] !== (void 0) ? arguments[0] : { |
| from: 0, |
| to: this.hot.countRows() - 1 |
| }; |
| var colRange = arguments[1] !== (void 0) ? arguments[1] : { |
| from: 0, |
| to: this.hot.countCols() - 1 |
| }; |
| var force = arguments[2] !== (void 0) ? arguments[2] : false; |
| var $__10 = this; |
| if (typeof rowRange === 'number') { |
| rowRange = { |
| from: rowRange, |
| to: rowRange |
| }; |
| } |
| if (typeof colRange === 'number') { |
| colRange = { |
| from: colRange, |
| to: colRange |
| }; |
| } |
| if (this.hot.getColHeader(0) !== null) { |
| var samples = this.samplesGenerator.generateRowSamples(-1, colRange); |
| this.ghostTable.addColumnHeadersRow(samples.get(-1)); |
| } |
| rangeEach(rowRange.from, rowRange.to, (function(row) { |
| if (force || $__10.heights[row] === void 0) { |
| var samples = $__10.samplesGenerator.generateRowSamples(row, colRange); |
| samples.forEach((function(sample, row) { |
| return $__10.ghostTable.addRow(row, sample); |
| })); |
| } |
| })); |
| if (this.ghostTable.rows.length) { |
| this.ghostTable.getHeights((function(row, height) { |
| return $__10.heights[row] = height; |
| })); |
| this.ghostTable.clean(); |
| } |
| }, |
| calculateAllRowsHeight: function() { |
| var colRange = arguments[0] !== (void 0) ? arguments[0] : { |
| from: 0, |
| to: this.hot.countCols() - 1 |
| }; |
| var $__10 = this; |
| var current = 0; |
| var length = this.hot.countRows() - 1; |
| var timer = null; |
| this.inProgress = true; |
| var loop = (function() { |
| if (!$__10.hot) { |
| cancelAnimationFrame(timer); |
| $__10.inProgress = false; |
| return; |
| } |
| $__10.calculateRowsHeight({ |
| from: current, |
| to: Math.min(current + $AutoRowSize.CALCULATION_STEP, length) |
| }, colRange); |
| current = current + $AutoRowSize.CALCULATION_STEP + 1; |
| if (current < length) { |
| timer = requestAnimationFrame(loop); |
| } else { |
| cancelAnimationFrame(timer); |
| $__10.inProgress = false; |
| $__10.hot.view.wt.wtOverlays.adjustElementsSize(true); |
| if ($__10.hot.view.wt.wtOverlays.leftOverlay.needFullRender) { |
| $__10.hot.view.wt.wtOverlays.leftOverlay.clone.draw(); |
| } |
| } |
| }); |
| if (this.firstCalculation && this.getSyncCalculationLimit()) { |
| this.calculateRowsHeight({ |
| from: 0, |
| to: this.getSyncCalculationLimit() |
| }, colRange); |
| this.firstCalculation = false; |
| current = this.getSyncCalculationLimit() + 1; |
| } |
| if (current < length) { |
| loop(); |
| } else { |
| this.inProgress = false; |
| } |
| }, |
| recalculateAllRowsHeight: function() { |
| if (isVisible(this.hot.view.wt.wtTable.TABLE)) { |
| this.clearCache(); |
| this.calculateAllRowsHeight(); |
| } |
| }, |
| getSyncCalculationLimit: function() { |
| var limit = $AutoRowSize.SYNC_CALCULATION_LIMIT; |
| var rowsLimit = this.hot.countRows() - 1; |
| if (isObject(this.hot.getSettings().autoRowSize)) { |
| limit = this.hot.getSettings().autoRowSize.syncLimit; |
| if (isPercentValue(limit)) { |
| limit = valueAccordingPercent(rowsLimit, limit); |
| } else { |
| limit = limit >> 0; |
| } |
| } |
| return Math.min(limit, rowsLimit); |
| }, |
| getRowHeight: function(row) { |
| var defaultHeight = arguments[1]; |
| var height = defaultHeight; |
| if (this.heights[row] !== void 0 && this.heights[row] > (defaultHeight || 0)) { |
| height = this.heights[row]; |
| } |
| return height; |
| }, |
| getColumnHeaderHeight: function() { |
| return this.heights[-1]; |
| }, |
| getFirstVisibleRow: function() { |
| var wot = this.hot.view.wt; |
| if (wot.wtViewport.rowsVisibleCalculator) { |
| return wot.wtTable.getFirstVisibleRow(); |
| } |
| if (wot.wtViewport.rowsRenderCalculator) { |
| return wot.wtTable.getFirstRenderedRow(); |
| } |
| return -1; |
| }, |
| getLastVisibleRow: function() { |
| var wot = this.hot.view.wt; |
| if (wot.wtViewport.rowsVisibleCalculator) { |
| return wot.wtTable.getLastVisibleRow(); |
| } |
| if (wot.wtViewport.rowsRenderCalculator) { |
| return wot.wtTable.getLastRenderedRow(); |
| } |
| return -1; |
| }, |
| clearCache: function() { |
| this.heights.length = 0; |
| this.heights[-1] = void 0; |
| }, |
| clearCacheByRange: function(range) { |
| var $__10 = this; |
| if (typeof range === 'number') { |
| range = { |
| from: range, |
| to: range |
| }; |
| } |
| rangeEach(Math.min(range.from, range.to), Math.max(range.from, range.to), (function(row) { |
| return $__10.heights[row] = void 0; |
| })); |
| }, |
| isNeedRecalculate: function() { |
| return arrayFilter(this.heights, (function(item) { |
| return (item === void 0); |
| })).length ? true : false; |
| }, |
| onBeforeRender: function() { |
| var force = this.hot.renderCall; |
| this.calculateRowsHeight({ |
| from: this.getFirstVisibleRow(), |
| to: this.getLastVisibleRow() |
| }, void 0, force); |
| var fixedRowsBottom = this.hot.getSettings().fixedRowsBottom; |
| if (fixedRowsBottom) { |
| var totalRows = this.hot.countRows() - 1; |
| this.calculateRowsHeight({ |
| from: totalRows - fixedRowsBottom, |
| to: totalRows |
| }); |
| } |
| if (this.isNeedRecalculate() && !this.inProgress) { |
| this.calculateAllRowsHeight(); |
| } |
| }, |
| onBeforeRowMove: function(from, to) { |
| this.clearCacheByRange({ |
| from: from, |
| to: to |
| }); |
| this.calculateAllRowsHeight(); |
| }, |
| onBeforeRowResize: function(row, size, isDblClick) { |
| if (isDblClick) { |
| this.calculateRowsHeight(row, void 0, true); |
| size = this.getRowHeight(row); |
| } |
| return size; |
| }, |
| onAfterLoadData: function() { |
| var $__10 = this; |
| if (this.hot.view) { |
| this.recalculateAllRowsHeight(); |
| } else { |
| setTimeout((function() { |
| if ($__10.hot) { |
| $__10.recalculateAllRowsHeight(); |
| } |
| }), 0); |
| } |
| }, |
| onBeforeChange: function(changes) { |
| var range = null; |
| if (changes.length === 1) { |
| range = changes[0][0]; |
| } else if (changes.length > 1) { |
| range = { |
| from: changes[0][0], |
| to: changes[changes.length - 1][0] |
| }; |
| } |
| if (range !== null) { |
| this.clearCacheByRange(range); |
| } |
| }, |
| destroy: function() { |
| this.ghostTable.clean(); |
| $traceurRuntime.superGet(this, $AutoRowSize.prototype, "destroy").call(this); |
| } |
| }, { |
| get CALCULATION_STEP() { |
| return 50; |
| }, |
| get SYNC_CALCULATION_LIMIT() { |
| return 500; |
| } |
| }, BasePlugin); |
| ; |
| registerPlugin('autoRowSize', AutoRowSize); |
| |
| //# |
| },{"_base":61,"helpers/array":43,"helpers/dom/element":47,"helpers/feature":49,"helpers/number":52,"helpers/object":53,"helpers/string":55,"plugins":60,"utils/ghostTable":115,"utils/samplesGenerator":117}],64:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| Autofill: {get: function() { |
| return Autofill; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47_eventManager__, |
| $___46__46__47__46__46__47_plugins__, |
| $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| offset = $__1.offset, |
| outerHeight = $__1.outerHeight, |
| outerWidth = $__1.outerWidth; |
| var eventManagerObject = ($___46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47_eventManager__}).eventManager; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var WalkontableCellCoords = ($___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ = _dereq_("3rdparty/walkontable/src/cell/coords"), $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__.__esModule && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ || {default: $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__}).WalkontableCellCoords; |
| ; |
| function getDeltas(start, end, data, direction) { |
| var rlength = data.length, |
| clength = data ? data[0].length : 0, |
| deltas = [], |
| arr = [], |
| diffRow, |
| diffCol, |
| startValue, |
| endValue, |
| delta; |
| diffRow = end.row - start.row; |
| diffCol = end.col - start.col; |
| if (['down', 'up'].indexOf(direction) !== -1) { |
| for (var col = 0; col <= diffCol; col++) { |
| startValue = parseInt(data[0][col], 10); |
| endValue = parseInt(data[rlength - 1][col], 10); |
| delta = (direction === 'down' ? (endValue - startValue) : (startValue - endValue)) / (rlength - 1) || 0; |
| arr.push(delta); |
| } |
| deltas.push(arr); |
| } |
| if (['right', 'left'].indexOf(direction) !== -1) { |
| for (var row = 0; row <= diffRow; row++) { |
| startValue = parseInt(data[row][0], 10); |
| endValue = parseInt(data[row][clength - 1], 10); |
| delta = (direction === 'right' ? (endValue - startValue) : (startValue - endValue)) / (clength - 1) || 0; |
| arr = []; |
| arr.push(delta); |
| deltas.push(arr); |
| } |
| } |
| return deltas; |
| } |
| function Autofill(instance) { |
| var _this = this, |
| mouseDownOnCellCorner = false, |
| wtOnCellCornerMouseDown, |
| wtOnCellMouseOver, |
| eventManager; |
| this.instance = instance; |
| this.addingStarted = false; |
| eventManager = eventManagerObject(instance); |
| function mouseUpCallback(event) { |
| if (!instance.autofill) { |
| return true; |
| } |
| if (instance.autofill.handle && instance.autofill.handle.isDragged) { |
| if (instance.autofill.handle.isDragged > 1) { |
| instance.autofill.apply(); |
| } |
| instance.autofill.handle.isDragged = 0; |
| mouseDownOnCellCorner = false; |
| } |
| } |
| function mouseMoveCallback(event) { |
| var tableBottom, |
| tableRight; |
| if (!_this.instance.autofill) { |
| return false; |
| } |
| tableBottom = offset(_this.instance.table).top - (window.pageYOffset || document.documentElement.scrollTop) + outerHeight(_this.instance.table); |
| tableRight = offset(_this.instance.table).left - (window.pageXOffset || document.documentElement.scrollLeft) + outerWidth(_this.instance.table); |
| if (_this.addingStarted === false && _this.instance.autofill.handle.isDragged > 0 && event.clientY > tableBottom && event.clientX <= tableRight) { |
| _this.instance.mouseDragOutside = true; |
| _this.addingStarted = true; |
| } else { |
| _this.instance.mouseDragOutside = false; |
| } |
| if (_this.instance.mouseDragOutside && settings('autoInsertRow')) { |
| setTimeout(function() { |
| _this.addingStarted = false; |
| _this.instance.alter('insert_row'); |
| }, 200); |
| } |
| } |
| eventManager.addEventListener(document, 'mouseup', mouseUpCallback); |
| eventManager.addEventListener(document, 'mousemove', mouseMoveCallback); |
| wtOnCellCornerMouseDown = this.instance.view.wt.wtSettings.settings.onCellCornerMouseDown; |
| this.instance.view.wt.wtSettings.settings.onCellCornerMouseDown = function(event) { |
| instance.autofill.handle.isDragged = 1; |
| mouseDownOnCellCorner = true; |
| wtOnCellCornerMouseDown(event); |
| }; |
| wtOnCellMouseOver = this.instance.view.wt.wtSettings.settings.onCellMouseOver; |
| this.instance.view.wt.wtSettings.settings.onCellMouseOver = function(event, coords, TD, wt) { |
| if (instance.autofill && mouseDownOnCellCorner && !instance.view.isMouseDown() && instance.autofill.handle && instance.autofill.handle.isDragged) { |
| instance.autofill.handle.isDragged++; |
| instance.autofill.showBorder(coords); |
| instance.autofill.checkIfNewRowNeeded(); |
| } |
| wtOnCellMouseOver(event, coords, TD, wt); |
| }; |
| this.instance.view.wt.wtSettings.settings.onCellCornerDblClick = function() { |
| instance.autofill.selectAdjacent(); |
| }; |
| } |
| Autofill.prototype.init = function() { |
| this.handle = {}; |
| }; |
| Autofill.prototype.disable = function() { |
| this.handle.disabled = true; |
| }; |
| Autofill.prototype.selectAdjacent = function() { |
| var select, |
| data, |
| r, |
| maxR, |
| c; |
| if (this.instance.selection.isMultiple()) { |
| select = this.instance.view.wt.selections.area.getCorners(); |
| } else { |
| select = this.instance.view.wt.selections.current.getCorners(); |
| } |
| data = this.instance.getData(); |
| rows: for (r = select[2] + 1; r < this.instance.countRows(); r++) { |
| for (c = select[1]; c <= select[3]; c++) { |
| if (data[r][c]) { |
| break rows; |
| } |
| } |
| if (!!data[r][select[1] - 1] || !!data[r][select[3] + 1]) { |
| maxR = r; |
| } |
| } |
| if (maxR) { |
| this.instance.view.wt.selections.fill.clear(); |
| this.instance.view.wt.selections.fill.add(new WalkontableCellCoords(select[0], select[1])); |
| this.instance.view.wt.selections.fill.add(new WalkontableCellCoords(maxR, select[3])); |
| this.apply(); |
| } |
| }; |
| Autofill.prototype.apply = function() { |
| var drag, |
| select, |
| start, |
| end, |
| _data, |
| direction, |
| deltas, |
| selRange; |
| this.handle.isDragged = 0; |
| if (this.instance.view.wt.selections.fill.isEmpty()) { |
| return; |
| } |
| drag = this.instance.view.wt.selections.fill.getCorners(); |
| this.instance.view.wt.selections.fill.clear(); |
| if (this.instance.selection.isMultiple()) { |
| select = this.instance.view.wt.selections.area.getCorners(); |
| } else { |
| select = this.instance.view.wt.selections.current.getCorners(); |
| } |
| Handsontable.hooks.run(this.instance, 'afterAutofillApplyValues', select, drag); |
| if (drag[0] === select[0] && drag[1] < select[1]) { |
| direction = 'left'; |
| start = new WalkontableCellCoords(drag[0], drag[1]); |
| end = new WalkontableCellCoords(drag[2], select[1] - 1); |
| } else if (drag[0] === select[0] && drag[3] > select[3]) { |
| direction = 'right'; |
| start = new WalkontableCellCoords(drag[0], select[3] + 1); |
| end = new WalkontableCellCoords(drag[2], drag[3]); |
| } else if (drag[0] < select[0] && drag[1] === select[1]) { |
| direction = 'up'; |
| start = new WalkontableCellCoords(drag[0], drag[1]); |
| end = new WalkontableCellCoords(select[0] - 1, drag[3]); |
| } else if (drag[2] > select[2] && drag[1] === select[1]) { |
| direction = 'down'; |
| start = new WalkontableCellCoords(select[2] + 1, drag[1]); |
| end = new WalkontableCellCoords(drag[2], drag[3]); |
| } |
| if (start && start.row > -1 && start.col > -1) { |
| selRange = { |
| from: this.instance.getSelectedRange().from, |
| to: this.instance.getSelectedRange().to |
| }; |
| _data = this.instance.getData(selRange.from.row, selRange.from.col, selRange.to.row, selRange.to.col); |
| deltas = getDeltas(start, end, _data, direction); |
| Handsontable.hooks.run(this.instance, 'beforeAutofill', start, end, _data); |
| this.instance.populateFromArray(start.row, start.col, _data, end.row, end.col, 'autofill', null, direction, deltas); |
| this.instance.selection.setRangeStart(new WalkontableCellCoords(drag[0], drag[1])); |
| this.instance.selection.setRangeEnd(new WalkontableCellCoords(drag[2], drag[3])); |
| } else { |
| this.instance.selection.refreshBorders(); |
| } |
| }; |
| Autofill.prototype.showBorder = function(coords) { |
| var topLeft = this.instance.getSelectedRange().getTopLeftCorner(), |
| bottomRight = this.instance.getSelectedRange().getBottomRightCorner(); |
| if (settings('direction') !== 'horizontal' && (bottomRight.row < coords.row || topLeft.row > coords.row)) { |
| coords = new WalkontableCellCoords(coords.row, bottomRight.col); |
| } else if (settings('direction') !== 'vertical') { |
| coords = new WalkontableCellCoords(bottomRight.row, coords.col); |
| } else { |
| return; |
| } |
| this.instance.view.wt.selections.fill.clear(); |
| this.instance.view.wt.selections.fill.add(this.instance.getSelectedRange().from); |
| this.instance.view.wt.selections.fill.add(this.instance.getSelectedRange().to); |
| this.instance.view.wt.selections.fill.add(coords); |
| this.instance.view.render(); |
| }; |
| Autofill.prototype.checkIfNewRowNeeded = function() { |
| var fillCorners, |
| selection, |
| tableRows = this.instance.countRows(), |
| that = this; |
| if (this.instance.view.wt.selections.fill.cellRange && this.addingStarted === false && settings('autoInsertRow')) { |
| selection = this.instance.getSelected(); |
| fillCorners = this.instance.view.wt.selections.fill.getCorners(); |
| if (selection[2] < tableRows - 1 && fillCorners[2] === tableRows - 1) { |
| this.addingStarted = true; |
| this.instance._registerTimeout(setTimeout(function() { |
| that.instance.alter('insert_row'); |
| that.addingStarted = false; |
| }, 200)); |
| } |
| } |
| }; |
| Handsontable.hooks.add('afterInit', function() { |
| var autofill = new Autofill(this); |
| settings = settingsFactory(this.getSettings().fillHandle); |
| if (settings('fillHandle') !== void 0) { |
| if (autofill.handle && settings('fillHandle') === false) { |
| autofill.disable(); |
| } else if (!autofill.handle && settings('fillHandle') !== false) { |
| this.autofill = autofill; |
| this.autofill.init(); |
| } |
| } |
| }); |
| var settings; |
| function settingsFactory(settings) { |
| return function(key) { |
| var result; |
| if (key === 'direction') { |
| if (typeof settings === 'string') { |
| result = settings; |
| } else if (typeof settings === 'object' && settings[key] !== void 0) { |
| result = settings[key]; |
| } else { |
| result = true; |
| } |
| } else if (key === 'autoInsertRow') { |
| if (typeof settings === 'object' && settings[key] !== void 0) { |
| result = settings[key]; |
| } else { |
| result = true; |
| } |
| } else if (key === 'fillHandle') { |
| result = settings ? true : false; |
| } |
| return result; |
| }; |
| } |
| Handsontable.Autofill = Autofill; |
| |
| //# |
| },{"3rdparty/walkontable/src/cell/coords":6,"browser":24,"eventManager":42,"helpers/dom/element":47,"plugins":60}],65:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| ColumnSorting: {get: function() { |
| return ColumnSorting; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47_helpers_47_array__, |
| $___46__46__47__46__46__47_eventManager__, |
| $___46__46__47__95_base__, |
| $___46__46__47__46__46__47_plugins__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__1.addClass, |
| closest = $__1.closest, |
| hasClass = $__1.hasClass, |
| index = $__1.index, |
| removeClass = $__1.removeClass; |
| var $__2 = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}), |
| arrayEach = $__2.arrayEach, |
| arrayMap = $__2.arrayMap, |
| arrayReduce = $__2.arrayReduce; |
| var eventManagerObject = ($___46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47_eventManager__}).eventManager; |
| var BasePlugin = ($___46__46__47__95_base__ = _dereq_("_base"), $___46__46__47__95_base__ && $___46__46__47__95_base__.__esModule && $___46__46__47__95_base__ || {default: $___46__46__47__95_base__}).default; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| Handsontable.hooks.register('beforeColumnSort'); |
| Handsontable.hooks.register('afterColumnSort'); |
| var ColumnSorting = function ColumnSorting(hotInstance) { |
| $traceurRuntime.superConstructor($ColumnSorting).call(this, hotInstance); |
| this.sortIndicators = []; |
| this.lastSortedColumn = null; |
| }; |
| var $ColumnSorting = ColumnSorting; |
| ($traceurRuntime.createClass)(ColumnSorting, { |
| isEnabled: function() { |
| return !!(this.hot.getSettings().columnSorting); |
| }, |
| enablePlugin: function() { |
| var $__6 = this; |
| if (this.enabled) { |
| return; |
| } |
| var _this = this; |
| this.hot.sortIndex = []; |
| this.hot.sort = function() { |
| var args = Array.prototype.slice.call(arguments); |
| return _this.sortByColumn.apply(_this, args); |
| }; |
| if (typeof this.hot.getSettings().observeChanges === 'undefined') { |
| this.enableObserveChangesPlugin(); |
| } |
| this.bindColumnSortingAfterClick(); |
| this.addHook('afterTrimRow', (function(row) { |
| return $__6.sort(); |
| })); |
| this.addHook('afterUntrimRow', (function(row) { |
| return $__6.sort(); |
| })); |
| this.addHook('modifyRow', (function(row) { |
| return $__6.translateRow(row); |
| })); |
| this.addHook('afterUpdateSettings', (function() { |
| return $__6.onAfterUpdateSettings(); |
| })); |
| this.addHook('afterGetColHeader', (function(col, TH) { |
| return $__6.getColHeader(col, TH); |
| })); |
| this.addHook('afterCreateRow', function() { |
| _this.afterCreateRow.apply(_this, arguments); |
| }); |
| this.addHook('afterRemoveRow', function() { |
| _this.afterRemoveRow.apply(_this, arguments); |
| }); |
| this.addHook('afterInit', (function() { |
| return $__6.sortBySettings(); |
| })); |
| this.addHook('afterLoadData', (function() { |
| $__6.hot.sortIndex = []; |
| if ($__6.hot.view) { |
| $__6.sortBySettings(); |
| } |
| })); |
| if (this.hot.view) { |
| this.sortBySettings(); |
| } |
| $traceurRuntime.superGet(this, $ColumnSorting.prototype, "enablePlugin").call(this); |
| }, |
| disablePlugin: function() { |
| this.hot.sort = void 0; |
| $traceurRuntime.superGet(this, $ColumnSorting.prototype, "disablePlugin").call(this); |
| }, |
| onAfterUpdateSettings: function() { |
| this.sortBySettings(); |
| }, |
| sortBySettings: function() { |
| var sortingSettings = this.hot.getSettings().columnSorting; |
| var loadedSortingState = this.loadSortingState(); |
| var sortingColumn; |
| var sortingOrder; |
| if (typeof loadedSortingState === 'undefined') { |
| sortingColumn = sortingSettings.column; |
| sortingOrder = sortingSettings.sortOrder; |
| } else { |
| sortingColumn = loadedSortingState.sortColumn; |
| sortingOrder = loadedSortingState.sortOrder; |
| } |
| if (typeof sortingColumn === 'number') { |
| this.lastSortedColumn = sortingColumn; |
| this.sortByColumn(sortingColumn, sortingOrder); |
| } |
| }, |
| setSortingColumn: function(col, order) { |
| if (typeof col == 'undefined') { |
| this.hot.sortColumn = void 0; |
| this.hot.sortOrder = void 0; |
| return; |
| } else if (this.hot.sortColumn === col && typeof order == 'undefined') { |
| if (this.hot.sortOrder === false) { |
| this.hot.sortOrder = void 0; |
| } else { |
| this.hot.sortOrder = !this.hot.sortOrder; |
| } |
| } else { |
| this.hot.sortOrder = typeof order === 'undefined' ? true : order; |
| } |
| this.hot.sortColumn = col; |
| }, |
| sortByColumn: function(col, order) { |
| this.setSortingColumn(col, order); |
| if (typeof this.hot.sortColumn == 'undefined') { |
| return; |
| } |
| var allowSorting = Handsontable.hooks.run(this.hot, 'beforeColumnSort', this.hot.sortColumn, this.hot.sortOrder); |
| if (allowSorting !== false) { |
| this.sort(); |
| } |
| this.updateOrderClass(); |
| this.updateSortIndicator(); |
| this.hot.render(); |
| this.saveSortingState(); |
| Handsontable.hooks.run(this.hot, 'afterColumnSort', this.hot.sortColumn, this.hot.sortOrder); |
| }, |
| saveSortingState: function() { |
| var sortingState = {}; |
| if (typeof this.hot.sortColumn != 'undefined') { |
| sortingState.sortColumn = this.hot.sortColumn; |
| } |
| if (typeof this.hot.sortOrder != 'undefined') { |
| sortingState.sortOrder = this.hot.sortOrder; |
| } |
| if (sortingState.hasOwnProperty('sortColumn') || sortingState.hasOwnProperty('sortOrder')) { |
| Handsontable.hooks.run(this.hot, 'persistentStateSave', 'columnSorting', sortingState); |
| } |
| }, |
| loadSortingState: function() { |
| var storedState = {}; |
| Handsontable.hooks.run(this.hot, 'persistentStateLoad', 'columnSorting', storedState); |
| return storedState.value; |
| }, |
| updateOrderClass: function() { |
| var orderClass; |
| if (this.hot.sortOrder === true) { |
| orderClass = 'ascending'; |
| } else if (this.hot.sortOrder === false) { |
| orderClass = 'descending'; |
| } |
| this.sortOrderClass = orderClass; |
| }, |
| bindColumnSortingAfterClick: function() { |
| var $__6 = this; |
| if (this.bindedSortEvent) { |
| return; |
| } |
| var eventManager = eventManagerObject(this.hot), |
| _this = this; |
| this.bindedSortEvent = true; |
| eventManager.addEventListener(this.hot.rootElement, 'click', (function(e) { |
| if (hasClass(e.target, 'columnSorting')) { |
| var col = getColumn(e.target); |
| if (col !== $__6.lastSortedColumn) { |
| $__6.hot.sortOrder = true; |
| } |
| $__6.lastSortedColumn = col; |
| $__6.sortByColumn(col); |
| } |
| })); |
| function countRowHeaders() { |
| var tr = _this.hot.view.TBODY.querySelector('tr'); |
| var length = 1; |
| if (tr) { |
| length = tr.querySelectorAll('th').length; |
| } |
| return length; |
| } |
| function getColumn(target) { |
| var TH = closest(target, 'TH'); |
| return _this.hot.view.wt.wtTable.getFirstRenderedColumn() + index(TH) - countRowHeaders(); |
| } |
| }, |
| enableObserveChangesPlugin: function() { |
| var _this = this; |
| this.hot._registerTimeout(setTimeout(function() { |
| _this.hot.updateSettings({observeChanges: true}); |
| }, 0)); |
| }, |
| defaultSort: function(sortOrder) { |
| return function(a, b) { |
| if (typeof a[1] == 'string') { |
| a[1] = a[1].toLowerCase(); |
| } |
| if (typeof b[1] == 'string') { |
| b[1] = b[1].toLowerCase(); |
| } |
| if (a[1] === b[1]) { |
| return 0; |
| } |
| if (a[1] === null || a[1] === '') { |
| return 1; |
| } |
| if (b[1] === null || b[1] === '') { |
| return -1; |
| } |
| if (isNaN(a[1]) && !isNaN(b[1])) { |
| return sortOrder ? 1 : -1; |
| } else if (!isNaN(a[1]) && isNaN(b[1])) { |
| return sortOrder ? -1 : 1; |
| } else if (!(isNaN(a[1]) || isNaN(b[1]))) { |
| a[1] = parseFloat(a[1]); |
| b[1] = parseFloat(b[1]); |
| } |
| if (a[1] < b[1]) { |
| return sortOrder ? -1 : 1; |
| } |
| if (a[1] > b[1]) { |
| return sortOrder ? 1 : -1; |
| } |
| return 0; |
| }; |
| }, |
| dateSort: function(sortOrder) { |
| return function(a, b) { |
| if (a[1] === b[1]) { |
| return 0; |
| } |
| if (a[1] === null || a[1] === '') { |
| return 1; |
| } |
| if (b[1] === null || b[1] === '') { |
| return -1; |
| } |
| var aDate = new Date(a[1]); |
| var bDate = new Date(b[1]); |
| if (aDate < bDate) { |
| return sortOrder ? -1 : 1; |
| } |
| if (aDate > bDate) { |
| return sortOrder ? 1 : -1; |
| } |
| return 0; |
| }; |
| }, |
| numericSort: function(sortOrder) { |
| return function(a, b) { |
| var parsedA = parseFloat(a[1]); |
| var parsedB = parseFloat(b[1]); |
| if (parsedA === parsedB || (isNaN(parsedA) && isNaN(parsedB))) { |
| return 0; |
| } |
| if (isNaN(parsedA)) { |
| return 1; |
| } |
| if (isNaN(parsedB)) { |
| return -1; |
| } |
| if (parsedA < parsedB) { |
| return sortOrder ? -1 : 1; |
| } else if (parsedA > parsedB) { |
| return sortOrder ? 1 : -1; |
| } |
| return 0; |
| }; |
| }, |
| sort: function() { |
| if (typeof this.hot.sortOrder == 'undefined') { |
| this.hot.sortIndex.length = 0; |
| return; |
| } |
| var colMeta, |
| sortFunction; |
| this.hot.sortingEnabled = false; |
| this.hot.sortIndex.length = 0; |
| for (var i = 0, |
| ilen = this.hot.countRows() - this.hot.getSettings().minSpareRows; i < ilen; i++) { |
| this.hot.sortIndex.push([i, this.hot.getDataAtCell(i, this.hot.sortColumn)]); |
| } |
| colMeta = this.hot.getCellMeta(0, this.hot.sortColumn); |
| if (colMeta.sortFunction) { |
| sortFunction = colMeta.sortFunction; |
| } else { |
| switch (colMeta.type) { |
| case 'date': |
| sortFunction = this.dateSort; |
| break; |
| case 'numeric': |
| sortFunction = this.numericSort; |
| break; |
| default: |
| sortFunction = this.defaultSort; |
| } |
| } |
| this.hot.sortIndex.sort(sortFunction(this.hot.sortOrder)); |
| for (var i$__8 = this.hot.sortIndex.length; i$__8 < this.hot.countRows(); i$__8++) { |
| this.hot.sortIndex.push([i$__8, this.hot.getDataAtCell(i$__8, this.hot.sortColumn)]); |
| } |
| this.hot.sortingEnabled = true; |
| }, |
| updateSortIndicator: function() { |
| if (typeof this.hot.sortOrder == 'undefined') { |
| return; |
| } |
| var colMeta = this.hot.getCellMeta(0, this.hot.sortColumn); |
| this.sortIndicators[this.hot.sortColumn] = colMeta.sortIndicator; |
| }, |
| translateRow: function(row) { |
| if (this.hot.sortingEnabled && (typeof this.hot.sortOrder !== 'undefined') && this.hot.sortIndex && this.hot.sortIndex.length && this.hot.sortIndex[row]) { |
| return this.hot.sortIndex[row][0]; |
| } |
| return row; |
| }, |
| untranslateRow: function(row) { |
| if (this.hot.sortingEnabled && this.hot.sortIndex && this.hot.sortIndex.length) { |
| for (var i = 0; i < this.hot.sortIndex.length; i++) { |
| if (this.hot.sortIndex[i][0] == row) { |
| return i; |
| } |
| } |
| } |
| }, |
| getColHeader: function(col, TH) { |
| if (col < 0 || !TH.parentNode) { |
| return false; |
| } |
| var headerLink = TH.querySelector('.colHeader'); |
| var colspan = TH.getAttribute('colspan'); |
| var TRs = TH.parentNode.parentNode.childNodes; |
| var headerLevel = Array.prototype.indexOf.call(TRs, TH.parentNode); |
| headerLevel = headerLevel - TRs.length; |
| if (!headerLink) { |
| return; |
| } |
| if (this.hot.getSettings().columnSorting && col >= 0 && headerLevel === -1) { |
| addClass(headerLink, 'columnSorting'); |
| } |
| removeClass(headerLink, 'descending'); |
| removeClass(headerLink, 'ascending'); |
| if (this.sortIndicators[col]) { |
| if (col === this.hot.sortColumn) { |
| if (this.sortOrderClass === 'ascending') { |
| addClass(headerLink, 'ascending'); |
| } else if (this.sortOrderClass === 'descending') { |
| addClass(headerLink, 'descending'); |
| } |
| } |
| } |
| }, |
| isSorted: function() { |
| return typeof this.hot.sortColumn != 'undefined'; |
| }, |
| afterCreateRow: function(index, amount) { |
| if (!this.isSorted()) { |
| return; |
| } |
| for (var i = 0; i < this.hot.sortIndex.length; i++) { |
| if (this.hot.sortIndex[i][0] >= index) { |
| this.hot.sortIndex[i][0] += amount; |
| } |
| } |
| for (var i = 0; i < amount; i++) { |
| this.hot.sortIndex.splice(index + i, 0, [index + i, this.hot.getSourceData()[index + i][this.hot.sortColumn + this.hot.colOffset()]]); |
| } |
| this.saveSortingState(); |
| }, |
| afterRemoveRow: function(index, amount) { |
| if (!this.isSorted()) { |
| return; |
| } |
| var removedRows = this.hot.sortIndex.splice(index, amount); |
| removedRows = arrayMap(removedRows, (function(row) { |
| return row[0]; |
| })); |
| function countRowShift(logicalRow) { |
| return arrayReduce(removedRows, (function(count, removedLogicalRow) { |
| if (logicalRow > removedLogicalRow) { |
| count++; |
| } |
| return count; |
| }), 0); |
| } |
| this.hot.sortIndex = arrayMap(this.hot.sortIndex, (function(logicalRow, physicalRow) { |
| var rowShift = countRowShift(logicalRow[0]); |
| if (rowShift) { |
| logicalRow[0] -= rowShift; |
| } |
| return logicalRow; |
| })); |
| this.saveSortingState(); |
| } |
| }, {}, BasePlugin); |
| ; |
| registerPlugin('columnSorting', ColumnSorting); |
| |
| //# |
| },{"_base":61,"browser":24,"eventManager":42,"helpers/array":43,"helpers/dom/element":47,"plugins":60}],66:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| CommentEditor: {get: function() { |
| return CommentEditor; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_helpers_47_dom_47_element__; |
| var addClass = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}).addClass; |
| var CommentEditor = function CommentEditor() { |
| this.editor = this.createEditor(); |
| this.editorStyle = this.editor.style; |
| this.editorStyle.position = 'absolute'; |
| this.editorStyle.zIndex = 100; |
| this.hide(); |
| }; |
| var $CommentEditor = CommentEditor; |
| ($traceurRuntime.createClass)(CommentEditor, { |
| setPosition: function(x, y) { |
| this.editorStyle.left = x + 'px'; |
| this.editorStyle.top = y + 'px'; |
| }, |
| show: function() { |
| this.editorStyle.display = 'block'; |
| }, |
| hide: function() { |
| this.editorStyle.display = 'none'; |
| }, |
| isVisible: function() { |
| return this.editorStyle.display === 'block'; |
| }, |
| setValue: function() { |
| var value = arguments[0] !== (void 0) ? arguments[0] : ''; |
| value = value || ''; |
| this.getInputElement().value = value; |
| }, |
| getValue: function() { |
| return this.getInputElement().value; |
| }, |
| isFocused: function() { |
| return document.activeElement === this.getInputElement(); |
| }, |
| focus: function() { |
| this.getInputElement().focus(); |
| }, |
| createEditor: function() { |
| var container = document.querySelector('.' + $CommentEditor.CLASS_EDITOR_CONTAINER); |
| var editor; |
| var textArea; |
| if (!container) { |
| container = document.createElement('div'); |
| addClass(container, $CommentEditor.CLASS_EDITOR_CONTAINER); |
| document.body.appendChild(container); |
| } |
| editor = document.createElement('div'); |
| addClass(editor, $CommentEditor.CLASS_EDITOR); |
| textArea = document.createElement('textarea'); |
| addClass(textArea, $CommentEditor.CLASS_INPUT); |
| editor.appendChild(textArea); |
| container.appendChild(editor); |
| return editor; |
| }, |
| getInputElement: function() { |
| return this.editor.querySelector('.' + $CommentEditor.CLASS_INPUT); |
| }, |
| destroy: function() { |
| this.editor.parentNode.removeChild(this.editor); |
| this.editor = null; |
| this.editorStyle = null; |
| } |
| }, { |
| get CLASS_EDITOR_CONTAINER() { |
| return 'htCommentsContainer'; |
| }, |
| get CLASS_EDITOR() { |
| return 'htComments'; |
| }, |
| get CLASS_INPUT() { |
| return 'htCommentTextArea'; |
| }, |
| get CLASS_CELL() { |
| return 'htCommentCell'; |
| } |
| }); |
| ; |
| |
| //# |
| },{"helpers/dom/element":47}],67:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| Comments: {get: function() { |
| return Comments; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47_eventManager__, |
| $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__, |
| $___46__46__47__46__46__47_plugins__, |
| $___46__46__47__95_base__, |
| $__commentEditor__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__1.addClass, |
| closest = $__1.closest, |
| getWindowScrollLeft = $__1.getWindowScrollLeft, |
| getWindowScrollTop = $__1.getWindowScrollTop, |
| hasClass = $__1.hasClass, |
| offset = $__1.offset; |
| var EventManager = ($___46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47_eventManager__}).EventManager; |
| var WalkontableCellCoords = ($___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ = _dereq_("3rdparty/walkontable/src/cell/coords"), $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__.__esModule && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ || {default: $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__}).WalkontableCellCoords; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var BasePlugin = ($___46__46__47__95_base__ = _dereq_("_base"), $___46__46__47__95_base__ && $___46__46__47__95_base__.__esModule && $___46__46__47__95_base__ || {default: $___46__46__47__95_base__}).default; |
| var CommentEditor = ($__commentEditor__ = _dereq_("commentEditor"), $__commentEditor__ && $__commentEditor__.__esModule && $__commentEditor__ || {default: $__commentEditor__}).CommentEditor; |
| var Comments = function Comments(hotInstance) { |
| $traceurRuntime.superConstructor($Comments).call(this, hotInstance); |
| this.editor = null; |
| this.eventManager = null; |
| this.range = {}; |
| this.mouseDown = false; |
| this.contextMenuEvent = false; |
| this.timer = null; |
| }; |
| var $Comments = Comments; |
| ($traceurRuntime.createClass)(Comments, { |
| isEnabled: function() { |
| return this.hot.getSettings().comments; |
| }, |
| enablePlugin: function() { |
| var $__7 = this; |
| if (this.enabled) { |
| return; |
| } |
| if (!this.editor) { |
| this.editor = new CommentEditor(); |
| } |
| if (!this.eventManager) { |
| this.eventManager = new EventManager(this); |
| } |
| this.addHook('afterContextMenuDefaultOptions', (function(options) { |
| return $__7.addToContextMenu(options); |
| })); |
| this.addHook('afterRenderer', (function(TD, row, col, prop, value, cellProperties) { |
| return $__7.onAfterRenderer(TD, cellProperties); |
| })); |
| this.addHook('afterScrollHorizontally', (function() { |
| return $__7.refreshEditorPosition(); |
| })); |
| this.addHook('afterScrollVertically', (function() { |
| return $__7.refreshEditorPosition(); |
| })); |
| this.addHook('afterColumnResize', (function() { |
| return $__7.refreshEditorPosition(); |
| })); |
| this.addHook('afterRowResize', (function() { |
| return $__7.refreshEditorPosition(); |
| })); |
| this.registerListeners(); |
| $traceurRuntime.superGet(this, $Comments.prototype, "enablePlugin").call(this); |
| }, |
| disablePlugin: function() { |
| $traceurRuntime.superGet(this, $Comments.prototype, "disablePlugin").call(this); |
| }, |
| registerListeners: function() { |
| var $__7 = this; |
| this.eventManager.addEventListener(document, 'mouseover', (function(event) { |
| return $__7.onMouseOver(event); |
| })); |
| this.eventManager.addEventListener(document, 'mousedown', (function(event) { |
| return $__7.onMouseDown(event); |
| })); |
| this.eventManager.addEventListener(document, 'mousemove', (function(event) { |
| return $__7.onMouseMove(event); |
| })); |
| this.eventManager.addEventListener(document, 'mouseup', (function(event) { |
| return $__7.onMouseUp(event); |
| })); |
| this.eventManager.addEventListener(this.editor.getInputElement(), 'blur', (function(event) { |
| return $__7.onEditorBlur(event); |
| })); |
| }, |
| setRange: function(range) { |
| this.range = range; |
| }, |
| clearRange: function() { |
| this.range = {}; |
| }, |
| targetIsCellWithComment: function(event) { |
| return hasClass(event.target, 'htCommentCell') && closest(event.target, [this.hot.rootElement]) ? true : false; |
| }, |
| targetIsCommentTextArea: function(event) { |
| return this.editor.getInputElement() === event.target; |
| }, |
| saveComment: function() { |
| if (!this.range.from) { |
| throw new Error('Before using this method, first set cell range (hot.getPlugin("comment").setRange())'); |
| } |
| var comment = this.editor.getValue(); |
| var row = this.range.from.row; |
| var col = this.range.from.col; |
| this.hot.setCellMeta(row, col, 'comment', comment); |
| this.hot.render(); |
| }, |
| saveCommentAtCell: function(row, col) { |
| this.setRange({from: new WalkontableCellCoords(row, col)}); |
| this.saveComment(); |
| }, |
| removeComment: function() { |
| if (!this.range.from) { |
| throw new Error('Before using this method, first set cell range (hot.getPlugin("comment").setRange())'); |
| } |
| this.hot.removeCellMeta(this.range.from.row, this.range.from.col, 'comment'); |
| this.hot.render(); |
| this.hide(); |
| }, |
| removeCommentAtCell: function(row, col) { |
| this.setRange({from: new WalkontableCellCoords(row, col)}); |
| this.removeComment(); |
| }, |
| show: function() { |
| if (!this.range.from) { |
| throw new Error('Before using this method, first set cell range (hot.getPlugin("comment").setRange())'); |
| } |
| var meta = this.hot.getCellMeta(this.range.from.row, this.range.from.col); |
| this.refreshEditorPosition(true); |
| this.editor.setValue(meta.comment || ''); |
| this.editor.show(); |
| return true; |
| }, |
| showAtCell: function(row, col) { |
| this.setRange({from: new WalkontableCellCoords(row, col)}); |
| return this.show(); |
| }, |
| hide: function() { |
| this.editor.hide(); |
| }, |
| refreshEditorPosition: function() { |
| var force = arguments[0] !== (void 0) ? arguments[0] : false; |
| if (!force && (!this.range.from || !this.editor.isVisible())) { |
| return; |
| } |
| var TD = this.hot.view.wt.wtTable.getCell(this.range.from); |
| var cellOffset = offset(TD); |
| var lastColWidth = this.hot.getColWidth(this.range.from.col); |
| var cellTopOffset = cellOffset.top; |
| var cellLeftOffset = cellOffset.left; |
| var verticalCompensation = 0; |
| var horizontalCompensation = 0; |
| if (this.hot.view.wt.wtViewport.hasVerticalScroll()) { |
| cellTopOffset = cellTopOffset - this.hot.view.wt.wtOverlays.topOverlay.getScrollPosition(); |
| verticalCompensation = 20; |
| } |
| if (this.hot.view.wt.wtViewport.hasHorizontalScroll()) { |
| cellLeftOffset = cellLeftOffset - this.hot.view.wt.wtOverlays.leftOverlay.getScrollPosition(); |
| horizontalCompensation = 20; |
| } |
| var x = cellLeftOffset + lastColWidth; |
| var y = cellTopOffset; |
| var rect = this.hot.view.wt.wtTable.holder.getBoundingClientRect(); |
| var holderPos = { |
| left: rect.left + getWindowScrollLeft() + horizontalCompensation, |
| right: rect.right + getWindowScrollLeft() - 15, |
| top: rect.top + getWindowScrollTop() + verticalCompensation, |
| bottom: rect.bottom + getWindowScrollTop() |
| }; |
| if (x <= holderPos.left || x > holderPos.right || y <= holderPos.top || y > holderPos.bottom) { |
| this.hide(); |
| } else { |
| this.editor.setPosition(x, y); |
| } |
| }, |
| onMouseDown: function(event) { |
| this.mouseDown = true; |
| if (!this.hot.view || !this.hot.view.wt) { |
| return; |
| } |
| if (!this.contextMenuEvent && !this.targetIsCommentTextArea(event) && !this.targetIsCellWithComment(event)) { |
| this.hide(); |
| } |
| this.contextMenuEvent = false; |
| }, |
| onMouseOver: function(event) { |
| if (this.mouseDown || this.editor.isFocused()) { |
| return; |
| } |
| if (this.targetIsCellWithComment(event)) { |
| var coordinates = this.hot.view.wt.wtTable.getCoords(event.target); |
| var range = {from: new WalkontableCellCoords(coordinates.row, coordinates.col)}; |
| this.setRange(range); |
| this.show(); |
| } else if (!this.targetIsCommentTextArea(event) && !this.editor.isFocused()) { |
| this.hide(); |
| } |
| }, |
| onMouseMove: function(event) { |
| var $__7 = this; |
| if (this.targetIsCommentTextArea(event)) { |
| this.mouseDown = true; |
| clearTimeout(this.timer); |
| this.timer = setTimeout((function() { |
| $__7.mouseDown = false; |
| }), 200); |
| } |
| }, |
| onMouseUp: function(event) { |
| this.mouseDown = false; |
| }, |
| onAfterRenderer: function(TD, cellProperties) { |
| if (cellProperties.comment) { |
| addClass(TD, cellProperties.commentedCellClassName); |
| } |
| }, |
| onEditorBlur: function(event) { |
| this.saveComment(); |
| }, |
| checkSelectionCommentsConsistency: function() { |
| var selected = this.hot.getSelectedRange(); |
| if (!selected) { |
| return false; |
| } |
| var hasComment = false; |
| var cell = selected.from; |
| if (this.hot.getCellMeta(cell.row, cell.col).comment) { |
| hasComment = true; |
| } |
| return hasComment; |
| }, |
| onContextMenuAddComment: function() { |
| var $__7 = this; |
| var coords = this.hot.getSelectedRange(); |
| this.contextMenuEvent = true; |
| this.setRange({from: coords.from}); |
| this.show(); |
| setTimeout((function() { |
| if ($__7.hot) { |
| $__7.hot.deselectCell(); |
| $__7.editor.focus(); |
| } |
| }), 10); |
| }, |
| onContextMenuRemoveComment: function(key, selection) { |
| this.contextMenuEvent = true; |
| this.removeCommentAtCell(selection.start.row, selection.start.col); |
| }, |
| addToContextMenu: function(defaultOptions) { |
| var $__7 = this; |
| defaultOptions.items.push(Handsontable.plugins.ContextMenu.SEPARATOR, { |
| key: 'commentsAddEdit', |
| name: (function() { |
| return $__7.checkSelectionCommentsConsistency() ? 'Edit Comment' : 'Add Comment'; |
| }), |
| callback: (function() { |
| return $__7.onContextMenuAddComment(); |
| }), |
| disabled: function() { |
| return this.getSelected() && !this.selection.selectedHeader.corner ? false : true; |
| } |
| }, { |
| key: 'commentsRemove', |
| name: function() { |
| return 'Delete Comment'; |
| }, |
| callback: (function(key, selection) { |
| return $__7.onContextMenuRemoveComment(key, selection); |
| }), |
| disabled: (function() { |
| return $__7.hot.selection.selectedHeader.corner || !$__7.checkSelectionCommentsConsistency(); |
| }) |
| }); |
| }, |
| destroy: function() { |
| if (this.editor) { |
| this.editor.destroy(); |
| } |
| $traceurRuntime.superGet(this, $Comments.prototype, "destroy").call(this); |
| } |
| }, {}, BasePlugin); |
| ; |
| registerPlugin('comments', Comments); |
| |
| //# |
| },{"3rdparty/walkontable/src/cell/coords":6,"_base":61,"browser":24,"commentEditor":66,"eventManager":42,"helpers/dom/element":47,"plugins":60}],68:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| CommandExecutor: {get: function() { |
| return CommandExecutor; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_helpers_47_array__; |
| var arrayEach = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}).arrayEach; |
| var CommandExecutor = function CommandExecutor(hotInstance) { |
| this.hot = hotInstance; |
| this.commands = {}; |
| this.commonCallback = null; |
| }; |
| ($traceurRuntime.createClass)(CommandExecutor, { |
| registerCommand: function(name, commandDescriptor) { |
| this.commands[name] = commandDescriptor; |
| }, |
| setCommonCallback: function(callback) { |
| this.commonCallback = callback; |
| }, |
| execute: function(commandName) { |
| for (var params = [], |
| $__3 = 1; $__3 < arguments.length; $__3++) |
| params[$__3 - 1] = arguments[$__3]; |
| var $__1 = this; |
| var commandSplit = commandName.split(':'); |
| commandName = commandSplit[0]; |
| var subCommandName = commandSplit.length === 2 ? commandSplit[1] : null; |
| var command = this.commands[commandName]; |
| if (!command) { |
| throw new Error(("Menu command '" + commandName + "' not exists.")); |
| } |
| if (subCommandName && command.submenu) { |
| command = findSubCommand(subCommandName, command.submenu.items); |
| } |
| if (command.disabled === true) { |
| return; |
| } |
| if (typeof command.disabled == 'function' && command.disabled.call(this.hot) === true) { |
| return; |
| } |
| if (command.hasOwnProperty('submenu')) { |
| return; |
| } |
| var callbacks = []; |
| if (typeof command.callback === 'function') { |
| callbacks.push(command.callback); |
| } |
| if (typeof this.commonCallback === 'function') { |
| callbacks.push(this.commonCallback); |
| } |
| params.unshift(commandSplit.join(':')); |
| arrayEach(callbacks, (function(callback) { |
| return callback.apply($__1.hot, params); |
| })); |
| } |
| }, {}); |
| function findSubCommand(subCommandName, subCommands) { |
| var command; |
| arrayEach(subCommands, (function(cmd) { |
| var cmds = cmd.key ? cmd.key.split(':') : null; |
| if (Array.isArray(cmds) && cmds[1] === subCommandName) { |
| command = cmd; |
| return false; |
| } |
| })); |
| return command; |
| } |
| ; |
| |
| //# |
| },{"helpers/array":43}],69:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| ContextMenu: {get: function() { |
| return ContextMenu; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__95_base__, |
| $___46__46__47__46__46__47_helpers_47_array__, |
| $__commandExecutor__, |
| $___46__46__47__46__46__47_eventManager__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $__itemsFactory__, |
| $__menu__, |
| $___46__46__47__46__46__47_plugins__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_event__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $__predefinedItems__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var BasePlugin = ($___46__46__47__95_base__ = _dereq_("_base"), $___46__46__47__95_base__ && $___46__46__47__95_base__.__esModule && $___46__46__47__95_base__ || {default: $___46__46__47__95_base__}).default; |
| var arrayEach = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}).arrayEach; |
| var CommandExecutor = ($__commandExecutor__ = _dereq_("commandExecutor"), $__commandExecutor__ && $__commandExecutor__.__esModule && $__commandExecutor__ || {default: $__commandExecutor__}).CommandExecutor; |
| var EventManager = ($___46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47_eventManager__}).EventManager; |
| var hasClass = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}).hasClass; |
| var ItemsFactory = ($__itemsFactory__ = _dereq_("itemsFactory"), $__itemsFactory__ && $__itemsFactory__.__esModule && $__itemsFactory__ || {default: $__itemsFactory__}).ItemsFactory; |
| var Menu = ($__menu__ = _dereq_("menu"), $__menu__ && $__menu__.__esModule && $__menu__ || {default: $__menu__}).Menu; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var $__9 = ($___46__46__47__46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47__46__46__47_helpers_47_dom_47_event__ && $___46__46__47__46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_event__}), |
| stopPropagation = $__9.stopPropagation, |
| pageX = $__9.pageX, |
| pageY = $__9.pageY; |
| var $__10 = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| getWindowScrollLeft = $__10.getWindowScrollLeft, |
| getWindowScrollTop = $__10.getWindowScrollTop; |
| var $__11 = ($__predefinedItems__ = _dereq_("predefinedItems"), $__predefinedItems__ && $__predefinedItems__.__esModule && $__predefinedItems__ || {default: $__predefinedItems__}), |
| ROW_ABOVE = $__11.ROW_ABOVE, |
| ROW_BELOW = $__11.ROW_BELOW, |
| COLUMN_LEFT = $__11.COLUMN_LEFT, |
| COLUMN_RIGHT = $__11.COLUMN_RIGHT, |
| REMOVE_ROW = $__11.REMOVE_ROW, |
| REMOVE_COLUMN = $__11.REMOVE_COLUMN, |
| UNDO = $__11.UNDO, |
| REDO = $__11.REDO, |
| READ_ONLY = $__11.READ_ONLY, |
| ALIGNMENT = $__11.ALIGNMENT, |
| SEPARATOR = $__11.SEPARATOR; |
| var ContextMenu = function ContextMenu(hotInstance) { |
| $traceurRuntime.superConstructor($ContextMenu).call(this, hotInstance); |
| this.eventManager = new EventManager(this); |
| this.commandExecutor = new CommandExecutor(this.hot); |
| this.itemsFactory = null; |
| this.menu = null; |
| }; |
| var $ContextMenu = ContextMenu; |
| ($traceurRuntime.createClass)(ContextMenu, { |
| isEnabled: function() { |
| return this.hot.getSettings().contextMenu; |
| }, |
| enablePlugin: function() { |
| var $__12 = this; |
| if (this.enabled) { |
| return; |
| } |
| this.itemsFactory = new ItemsFactory(this.hot, $ContextMenu.DEFAULT_ITEMS); |
| var settings = this.hot.getSettings().contextMenu; |
| var predefinedItems = {items: this.itemsFactory.getItems(settings)}; |
| this.registerEvents(); |
| if (typeof settings.callback === 'function') { |
| this.commandExecutor.setCommonCallback(settings.callback); |
| } |
| $traceurRuntime.superGet(this, $ContextMenu.prototype, "enablePlugin").call(this); |
| this.callOnPluginsReady((function() { |
| $__12.hot.runHooks('afterContextMenuDefaultOptions', predefinedItems); |
| $__12.itemsFactory.setPredefinedItems(predefinedItems.items); |
| var menuItems = $__12.itemsFactory.getItems(settings); |
| $__12.menu = new Menu($__12.hot, { |
| className: 'htContextMenu', |
| keepInViewport: true |
| }); |
| $__12.menu.setMenuItems(menuItems); |
| $__12.menu.addLocalHook('afterOpen', (function() { |
| return $__12.onMenuAfterOpen(); |
| })); |
| $__12.menu.addLocalHook('afterClose', (function() { |
| return $__12.onMenuAfterClose(); |
| })); |
| $__12.menu.addLocalHook('executeCommand', (function() { |
| for (var params = [], |
| $__14 = 0; $__14 < arguments.length; $__14++) |
| params[$__14] = arguments[$__14]; |
| return $__12.executeCommand.apply($__12, params); |
| })); |
| arrayEach(menuItems, (function(command) { |
| return $__12.commandExecutor.registerCommand(command.key, command); |
| })); |
| })); |
| }, |
| updatePlugin: function() { |
| this.disablePlugin(); |
| this.enablePlugin(); |
| $traceurRuntime.superGet(this, $ContextMenu.prototype, "updatePlugin").call(this); |
| }, |
| disablePlugin: function() { |
| this.close(); |
| if (this.menu) { |
| this.menu.destroy(); |
| this.menu = null; |
| } |
| $traceurRuntime.superGet(this, $ContextMenu.prototype, "disablePlugin").call(this); |
| }, |
| registerEvents: function() { |
| var $__12 = this; |
| this.eventManager.addEventListener(this.hot.rootElement, 'contextmenu', (function(event) { |
| return $__12.onContextMenu(event); |
| })); |
| }, |
| open: function(event) { |
| if (!this.menu) { |
| return; |
| } |
| this.menu.open(); |
| this.menu.setPosition({ |
| top: parseInt(pageY(event), 10) - getWindowScrollTop(), |
| left: parseInt(pageX(event), 10) - getWindowScrollLeft() |
| }); |
| this.menu.hotMenu.isHotTableEnv = this.hot.isHotTableEnv; |
| Handsontable.eventManager.isHotTableEnv = this.hot.isHotTableEnv; |
| }, |
| close: function() { |
| if (!this.menu) { |
| return; |
| } |
| this.menu.close(); |
| }, |
| executeCommand: function() { |
| for (var params = [], |
| $__14 = 0; $__14 < arguments.length; $__14++) |
| params[$__14] = arguments[$__14]; |
| this.commandExecutor.execute.apply(this.commandExecutor, params); |
| }, |
| onContextMenu: function(event) { |
| var settings = this.hot.getSettings(); |
| var showRowHeaders = settings.rowHeaders; |
| var showColHeaders = settings.colHeaders; |
| function isValidElement(element) { |
| return element.nodeName === 'TD' || element.parentNode.nodeName === 'TD'; |
| } |
| var element = event.realTarget; |
| this.close(); |
| event.preventDefault(); |
| stopPropagation(event); |
| if (!(showRowHeaders || showColHeaders)) { |
| if (!isValidElement(element) && !(hasClass(element, 'current') && hasClass(element, 'wtBorder'))) { |
| return; |
| } |
| } |
| this.open(event); |
| }, |
| onMenuAfterOpen: function() { |
| this.hot.runHooks('afterContextMenuShow', this); |
| }, |
| onMenuAfterClose: function() { |
| this.hot.listen(); |
| this.hot.runHooks('afterContextMenuHide', this); |
| }, |
| destroy: function() { |
| this.close(); |
| if (this.menu) { |
| this.menu.destroy(); |
| } |
| $traceurRuntime.superGet(this, $ContextMenu.prototype, "destroy").call(this); |
| } |
| }, {get DEFAULT_ITEMS() { |
| return [ROW_ABOVE, ROW_BELOW, SEPARATOR, COLUMN_LEFT, COLUMN_RIGHT, SEPARATOR, REMOVE_ROW, REMOVE_COLUMN, SEPARATOR, UNDO, REDO, SEPARATOR, READ_ONLY, SEPARATOR, ALIGNMENT]; |
| }}, BasePlugin); |
| ContextMenu.SEPARATOR = {name: SEPARATOR}; |
| Handsontable.hooks.register('afterContextMenuDefaultOptions'); |
| Handsontable.hooks.register('afterContextMenuShow'); |
| Handsontable.hooks.register('afterContextMenuHide'); |
| Handsontable.hooks.register('afterContextMenuExecute'); |
| ; |
| registerPlugin('contextMenu', ContextMenu); |
| |
| //# |
| },{"_base":61,"browser":24,"commandExecutor":68,"eventManager":42,"helpers/array":43,"helpers/dom/element":47,"helpers/dom/event":48,"itemsFactory":71,"menu":72,"plugins":60,"predefinedItems":73}],70:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| Cursor: {get: function() { |
| return Cursor; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_event__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| getWindowScrollLeft = $__1.getWindowScrollLeft, |
| getWindowScrollTop = $__1.getWindowScrollTop; |
| var $__2 = ($___46__46__47__46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47__46__46__47_helpers_47_dom_47_event__ && $___46__46__47__46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_event__}), |
| pageX = $__2.pageX, |
| pageY = $__2.pageY; |
| var Cursor = function Cursor(object) { |
| var windowScrollTop = getWindowScrollTop(); |
| var windowScrollLeft = getWindowScrollLeft(); |
| var top, |
| topRelative; |
| var left, |
| leftRelative; |
| var cellHeight, |
| cellWidth; |
| this.type = this.getSourceType(object); |
| if (this.type === 'literal') { |
| top = parseInt(object.top, 10); |
| left = parseInt(object.left, 10); |
| cellHeight = object.height || 0; |
| cellWidth = object.width || 0; |
| topRelative = top; |
| leftRelative = left; |
| top = top + windowScrollTop; |
| left = left + windowScrollLeft; |
| } else if (this.type === 'event') { |
| top = parseInt(pageY(object), 10); |
| left = parseInt(pageX(object), 10); |
| cellHeight = object.target.clientHeight; |
| cellWidth = object.target.clientWidth; |
| topRelative = top - windowScrollTop; |
| leftRelative = left - windowScrollLeft; |
| } |
| this.top = top; |
| this.topRelative = topRelative; |
| this.left = left; |
| this.leftRelative = leftRelative; |
| this.scrollTop = windowScrollTop; |
| this.scrollLeft = windowScrollLeft; |
| this.cellHeight = cellHeight; |
| this.cellWidth = cellWidth; |
| }; |
| ($traceurRuntime.createClass)(Cursor, { |
| getSourceType: function(object) { |
| var type = 'literal'; |
| if (object instanceof Event) { |
| type = 'event'; |
| } |
| return type; |
| }, |
| fitsAbove: function(element) { |
| return this.topRelative >= element.offsetHeight; |
| }, |
| fitsBelow: function(element) { |
| var viewportHeight = arguments[1] !== (void 0) ? arguments[1] : window.innerHeight; |
| return this.topRelative + element.offsetHeight <= viewportHeight; |
| }, |
| fitsOnRight: function(element) { |
| var viewportWidth = arguments[1] !== (void 0) ? arguments[1] : window.innerWidth; |
| return this.leftRelative + this.cellWidth + element.offsetWidth <= viewportWidth; |
| }, |
| fitsOnLeft: function(element) { |
| return this.leftRelative >= element.offsetWidth; |
| } |
| }, {}); |
| ; |
| Handsontable.plugins.utils = Handsontable.plugins.utils || {}; |
| Handsontable.plugins.utils.Cursor = Cursor; |
| |
| //# |
| },{"browser":24,"helpers/dom/element":47,"helpers/dom/event":48}],71:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| ItemsFactory: {get: function() { |
| return ItemsFactory; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_helpers_47_object__, |
| $___46__46__47__46__46__47_helpers_47_array__, |
| $__predefinedItems__; |
| var $__0 = ($___46__46__47__46__46__47_helpers_47_object__ = _dereq_("helpers/object"), $___46__46__47__46__46__47_helpers_47_object__ && $___46__46__47__46__46__47_helpers_47_object__.__esModule && $___46__46__47__46__46__47_helpers_47_object__ || {default: $___46__46__47__46__46__47_helpers_47_object__}), |
| objectEach = $__0.objectEach, |
| isObject = $__0.isObject, |
| extend = $__0.extend; |
| var arrayEach = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}).arrayEach; |
| var $__2 = ($__predefinedItems__ = _dereq_("predefinedItems"), $__predefinedItems__ && $__predefinedItems__.__esModule && $__predefinedItems__ || {default: $__predefinedItems__}), |
| SEPARATOR = $__2.SEPARATOR, |
| ITEMS = $__2.ITEMS, |
| predefinedItems = $__2.predefinedItems; |
| var ItemsFactory = function ItemsFactory(hotInstance) { |
| var orderPattern = arguments[1] !== (void 0) ? arguments[1] : null; |
| this.hot = hotInstance; |
| this.predefinedItems = predefinedItems(); |
| this.defaultOrderPattern = orderPattern; |
| }; |
| ($traceurRuntime.createClass)(ItemsFactory, { |
| setPredefinedItems: function(predefinedItems) { |
| var $__3 = this; |
| var items = {}; |
| this.defaultOrderPattern.length = 0; |
| objectEach(predefinedItems, (function(value, key) { |
| var menuItemKey = ''; |
| if (value.name === SEPARATOR) { |
| items[SEPARATOR] = value; |
| menuItemKey = SEPARATOR; |
| } else if (isNaN(parseInt(key, 10))) { |
| value.key = value.key === void 0 ? key : value.key; |
| items[key] = value; |
| menuItemKey = value.key; |
| } else { |
| items[value.key] = value; |
| menuItemKey = value.key; |
| } |
| $__3.defaultOrderPattern.push(menuItemKey); |
| })); |
| this.predefinedItems = items; |
| }, |
| getItems: function() { |
| var pattern = arguments[0] !== (void 0) ? arguments[0] : null; |
| return getItems(pattern, this.defaultOrderPattern, this.predefinedItems); |
| } |
| }, {}); |
| function getItems() { |
| var pattern = arguments[0] !== (void 0) ? arguments[0] : null; |
| var defaultPattern = arguments[1] !== (void 0) ? arguments[1] : []; |
| var items = arguments[2] !== (void 0) ? arguments[2] : {}; |
| var result = []; |
| if (pattern && pattern.items) { |
| pattern = pattern.items; |
| } else if (!Array.isArray(pattern)) { |
| pattern = defaultPattern; |
| } |
| if (isObject(pattern)) { |
| objectEach(pattern, (function(value, key) { |
| var item = items[typeof value === 'string' ? value : key]; |
| if (!item) { |
| item = value; |
| } |
| if (isObject(value)) { |
| extend(item, value); |
| } else if (typeof item === 'string') { |
| item = {name: item}; |
| } |
| if (item.key === void 0) { |
| item.key = key; |
| } |
| result.push(item); |
| })); |
| } else { |
| arrayEach(pattern, (function(name, key) { |
| var item = items[name]; |
| if (!item && ITEMS.indexOf(name) >= 0) { |
| return; |
| } |
| if (!item) { |
| item = { |
| name: name, |
| key: key + '' |
| }; |
| } |
| if (isObject(name)) { |
| extend(item, name); |
| } |
| if (item.key === void 0) { |
| item.key = key; |
| } |
| result.push(item); |
| })); |
| } |
| return result; |
| } |
| ; |
| |
| //# |
| },{"helpers/array":43,"helpers/object":53,"predefinedItems":73}],72:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| Menu: {get: function() { |
| return Menu; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47_helpers_47_array__, |
| $__cursor__, |
| $___46__46__47__46__46__47_eventManager__, |
| $___46__46__47__46__46__47_helpers_47_object__, |
| $___46__46__47__46__46__47_helpers_47_function__, |
| $__utils__, |
| $___46__46__47__46__46__47_helpers_47_unicode__, |
| $___46__46__47__46__46__47_mixins_47_localHooks__, |
| $__predefinedItems__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_event__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__1.addClass, |
| empty = $__1.empty, |
| fastInnerHTML = $__1.fastInnerHTML, |
| getScrollbarWidth = $__1.getScrollbarWidth, |
| isChildOf = $__1.isChildOf, |
| removeClass = $__1.removeClass; |
| var $__2 = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}), |
| arrayEach = $__2.arrayEach, |
| arrayFilter = $__2.arrayFilter, |
| arrayReduce = $__2.arrayReduce; |
| var Cursor = ($__cursor__ = _dereq_("cursor"), $__cursor__ && $__cursor__.__esModule && $__cursor__ || {default: $__cursor__}).Cursor; |
| var EventManager = ($___46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47_eventManager__}).EventManager; |
| var mixin = ($___46__46__47__46__46__47_helpers_47_object__ = _dereq_("helpers/object"), $___46__46__47__46__46__47_helpers_47_object__ && $___46__46__47__46__46__47_helpers_47_object__.__esModule && $___46__46__47__46__46__47_helpers_47_object__ || {default: $___46__46__47__46__46__47_helpers_47_object__}).mixin; |
| var debounce = ($___46__46__47__46__46__47_helpers_47_function__ = _dereq_("helpers/function"), $___46__46__47__46__46__47_helpers_47_function__ && $___46__46__47__46__46__47_helpers_47_function__.__esModule && $___46__46__47__46__46__47_helpers_47_function__ || {default: $___46__46__47__46__46__47_helpers_47_function__}).debounce; |
| var $__7 = ($__utils__ = _dereq_("utils"), $__utils__ && $__utils__.__esModule && $__utils__ || {default: $__utils__}), |
| filterSeparators = $__7.filterSeparators, |
| hasSubMenu = $__7.hasSubMenu, |
| isDisabled = $__7.isDisabled, |
| isItemHidden = $__7.isItemHidden, |
| isSeparator = $__7.isSeparator, |
| isSelectionDisabled = $__7.isSelectionDisabled, |
| normalizeSelection = $__7.normalizeSelection; |
| var KEY_CODES = ($___46__46__47__46__46__47_helpers_47_unicode__ = _dereq_("helpers/unicode"), $___46__46__47__46__46__47_helpers_47_unicode__ && $___46__46__47__46__46__47_helpers_47_unicode__.__esModule && $___46__46__47__46__46__47_helpers_47_unicode__ || {default: $___46__46__47__46__46__47_helpers_47_unicode__}).KEY_CODES; |
| var localHooks = ($___46__46__47__46__46__47_mixins_47_localHooks__ = _dereq_("mixins/localHooks"), $___46__46__47__46__46__47_mixins_47_localHooks__ && $___46__46__47__46__46__47_mixins_47_localHooks__.__esModule && $___46__46__47__46__46__47_mixins_47_localHooks__ || {default: $___46__46__47__46__46__47_mixins_47_localHooks__}).localHooks; |
| var SEPARATOR = ($__predefinedItems__ = _dereq_("predefinedItems"), $__predefinedItems__ && $__predefinedItems__.__esModule && $__predefinedItems__ || {default: $__predefinedItems__}).SEPARATOR; |
| var stopImmediatePropagation = ($___46__46__47__46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47__46__46__47_helpers_47_dom_47_event__ && $___46__46__47__46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_event__}).stopImmediatePropagation; |
| var Menu = function Menu(hotInstance, options) { |
| this.hot = hotInstance; |
| this.options = options || { |
| parent: null, |
| name: null, |
| className: '', |
| keepInViewport: true, |
| standalone: false |
| }; |
| this.eventManager = new EventManager(this); |
| this.container = this.createContainer(this.options.name); |
| this.hotMenu = null; |
| this.hotSubMenus = {}; |
| this.parentMenu = this.options.parent || null; |
| this.menuItems = null; |
| this.origOutsideClickDeselects = null; |
| this.offset = { |
| above: 0, |
| below: 0, |
| left: 0, |
| right: 0 |
| }; |
| this._afterScrollCallback = null; |
| this.registerEvents(); |
| }; |
| var $Menu = Menu; |
| ($traceurRuntime.createClass)(Menu, { |
| registerEvents: function() { |
| var $__12 = this; |
| this.eventManager.addEventListener(document.documentElement, 'mousedown', (function(event) { |
| return $__12.onDocumentMouseDown(event); |
| })); |
| }, |
| setMenuItems: function(menuItems) { |
| this.menuItems = menuItems; |
| }, |
| setOffset: function(area) { |
| var offset = arguments[1] !== (void 0) ? arguments[1] : 0; |
| this.offset[area] = offset; |
| }, |
| isSubMenu: function() { |
| return this.parentMenu !== null; |
| }, |
| open: function() { |
| var $__12 = this; |
| this.container.removeAttribute('style'); |
| this.container.style.display = 'block'; |
| var delayedOpenSubMenu = debounce((function(row) { |
| return $__12.openSubMenu(row); |
| }), 300); |
| var filteredItems = arrayFilter(this.menuItems, (function(item) { |
| return isItemHidden(item, $__12.hot); |
| })); |
| filteredItems = filterSeparators(filteredItems, SEPARATOR); |
| var settings = { |
| data: filteredItems, |
| colHeaders: false, |
| colWidths: [200], |
| autoRowSize: false, |
| readOnly: true, |
| copyPaste: false, |
| columns: [{ |
| data: 'name', |
| renderer: (function(hot, TD, row, col, prop, value) { |
| return $__12.menuItemRenderer(hot, TD, row, col, prop, value); |
| }) |
| }], |
| renderAllRows: true, |
| fragmentSelection: 'cell', |
| disableVisualSelection: 'area', |
| beforeKeyDown: (function(event) { |
| return $__12.onBeforeKeyDown(event); |
| }), |
| afterOnCellMouseOver: (function(event, coords, TD) { |
| if ($__12.isAllSubMenusClosed()) { |
| delayedOpenSubMenu(coords.row); |
| } else { |
| $__12.openSubMenu(coords.row); |
| } |
| }) |
| }; |
| this.origOutsideClickDeselects = this.hot.getSettings().outsideClickDeselects; |
| this.hot.getSettings().outsideClickDeselects = false; |
| this.hotMenu = new Handsontable.Core(this.container, settings); |
| this.hotMenu.addHook('afterInit', (function() { |
| return $__12.onAfterInit(); |
| })); |
| this.hotMenu.init(); |
| this.hotMenu.listen(); |
| this.blockMainTableCallbacks(); |
| this.runLocalHooks('afterOpen'); |
| }, |
| close: function() { |
| var closeParent = arguments[0] !== (void 0) ? arguments[0] : false; |
| if (!this.isOpened()) { |
| return; |
| } |
| if (closeParent && this.parentMenu) { |
| this.parentMenu.close(); |
| } else { |
| this.closeAllSubMenus(); |
| this.container.style.display = 'none'; |
| this.releaseMainTableCallbacks(); |
| this.hotMenu.destroy(); |
| this.hotMenu = null; |
| this.hot.getSettings().outsideClickDeselects = this.origOutsideClickDeselects; |
| this.runLocalHooks('afterClose'); |
| } |
| }, |
| openSubMenu: function(row) { |
| if (!this.hotMenu) { |
| return false; |
| } |
| var cell = this.hotMenu.getCell(row, 0); |
| this.closeAllSubMenus(); |
| if (!cell || !hasSubMenu(cell)) { |
| return false; |
| } |
| var dataItem = this.hotMenu.getSourceDataAtRow(row); |
| var subMenu = new $Menu(this.hot, { |
| parent: this, |
| name: dataItem.name, |
| className: this.options.className, |
| keepInViewport: true |
| }); |
| subMenu.setMenuItems(dataItem.submenu.items); |
| subMenu.open(); |
| subMenu.setPosition(cell.getBoundingClientRect()); |
| this.hotSubMenus[dataItem.key] = subMenu; |
| return subMenu; |
| }, |
| closeSubMenu: function(row) { |
| var dataItem = this.hotMenu.getSourceDataAtRow(row); |
| var menus = this.hotSubMenus[dataItem.key]; |
| if (menus) { |
| menus.destroy(); |
| delete this.hotSubMenus[dataItem.key]; |
| } |
| }, |
| closeAllSubMenus: function() { |
| var $__12 = this; |
| arrayEach(this.hotMenu.getData(), (function(value, row) { |
| return $__12.closeSubMenu(row); |
| })); |
| }, |
| isAllSubMenusClosed: function() { |
| return Object.keys(this.hotSubMenus).length === 0; |
| }, |
| destroy: function() { |
| this.clearLocalHooks(); |
| this.close(); |
| this.parentMenu = null; |
| this.eventManager.destroy(); |
| }, |
| isOpened: function() { |
| return this.hotMenu !== null; |
| }, |
| executeCommand: function(event) { |
| if (!this.isOpened() || !this.hotMenu.getSelected()) { |
| return; |
| } |
| var selectedItem = this.hotMenu.getSourceDataAtRow(this.hotMenu.getSelected()[0]); |
| this.runLocalHooks('select', selectedItem, event); |
| if (selectedItem.isCommand === false || selectedItem.name === SEPARATOR) { |
| return; |
| } |
| var selRange = this.hot.getSelectedRange(); |
| var normalizedSelection = selRange ? normalizeSelection(selRange) : {}; |
| var autoClose = true; |
| if (selectedItem.disabled === true || (typeof selectedItem.disabled === 'function' && selectedItem.disabled.call(this.hot) === true) || selectedItem.submenu) { |
| autoClose = false; |
| } |
| this.runLocalHooks('executeCommand', selectedItem.key, normalizedSelection, event); |
| if (this.isSubMenu()) { |
| this.parentMenu.runLocalHooks('executeCommand', selectedItem.key, normalizedSelection, event); |
| } |
| if (autoClose) { |
| this.close(true); |
| } |
| }, |
| setPosition: function(coords) { |
| var cursor = new Cursor(coords); |
| if (this.options.keepInViewport) { |
| if (cursor.fitsBelow(this.container)) { |
| this.setPositionBelowCursor(cursor); |
| } else if (cursor.fitsAbove(this.container)) { |
| this.setPositionAboveCursor(cursor); |
| } else { |
| this.setPositionBelowCursor(cursor); |
| } |
| if (cursor.fitsOnRight(this.container)) { |
| this.setPositionOnRightOfCursor(cursor); |
| } else { |
| this.setPositionOnLeftOfCursor(cursor); |
| } |
| } else { |
| this.setPositionBelowCursor(cursor); |
| this.setPositionOnRightOfCursor(cursor); |
| } |
| }, |
| setPositionAboveCursor: function(cursor) { |
| var top = this.offset.above + cursor.top - this.container.offsetHeight; |
| if (this.isSubMenu()) { |
| top = cursor.top + cursor.cellHeight - this.container.offsetHeight + 3; |
| } |
| this.container.style.top = top + 'px'; |
| }, |
| setPositionBelowCursor: function(cursor) { |
| var top = this.offset.below + cursor.top; |
| if (this.isSubMenu()) { |
| top = cursor.top - 1; |
| } |
| this.container.style.top = top + 'px'; |
| }, |
| setPositionOnRightOfCursor: function(cursor) { |
| var left; |
| if (this.isSubMenu()) { |
| left = 1 + cursor.left + cursor.cellWidth; |
| } else { |
| left = this.offset.right + 1 + cursor.left; |
| } |
| this.container.style.left = left + 'px'; |
| }, |
| setPositionOnLeftOfCursor: function(cursor) { |
| var left = this.offset.left + cursor.left - this.container.offsetWidth + getScrollbarWidth() + 4; |
| this.container.style.left = left + 'px'; |
| }, |
| selectFirstCell: function() { |
| var cell = this.hotMenu.getCell(0, 0); |
| if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) { |
| this.selectNextCell(0, 0); |
| } else { |
| this.hotMenu.selectCell(0, 0); |
| } |
| }, |
| selectLastCell: function() { |
| var lastRow = this.hotMenu.countRows() - 1; |
| var cell = this.hotMenu.getCell(lastRow, 0); |
| if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) { |
| this.selectPrevCell(lastRow, 0); |
| } else { |
| this.hotMenu.selectCell(lastRow, 0); |
| } |
| }, |
| selectNextCell: function(row, col) { |
| var nextRow = row + 1; |
| var cell = nextRow < this.hotMenu.countRows() ? this.hotMenu.getCell(nextRow, col) : null; |
| if (!cell) { |
| return; |
| } |
| if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) { |
| this.selectNextCell(nextRow, col); |
| } else { |
| this.hotMenu.selectCell(nextRow, col); |
| } |
| }, |
| selectPrevCell: function(row, col) { |
| var prevRow = row - 1; |
| var cell = prevRow >= 0 ? this.hotMenu.getCell(prevRow, col) : null; |
| if (!cell) { |
| return; |
| } |
| if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) { |
| this.selectPrevCell(prevRow, col); |
| } else { |
| this.hotMenu.selectCell(prevRow, col); |
| } |
| }, |
| menuItemRenderer: function(hot, TD, row, col, prop, value) { |
| var $__12 = this; |
| var item = hot.getSourceDataAtRow(row); |
| var wrapper = document.createElement('div'); |
| var isSubMenu = (function(item) { |
| return item.hasOwnProperty('submenu'); |
| }); |
| var itemIsSeparator = (function(item) { |
| return new RegExp(SEPARATOR, 'i').test(item.name); |
| }); |
| var itemIsDisabled = (function(item) { |
| return item.disabled === true || (typeof item.disabled == 'function' && item.disabled.call($__12.hot) === true); |
| }); |
| var itemIsSelectionDisabled = (function(item) { |
| return item.disableSelection; |
| }); |
| if (typeof value === 'function') { |
| value = value.call(this.hot); |
| } |
| empty(TD); |
| addClass(wrapper, 'htItemWrapper'); |
| TD.appendChild(wrapper); |
| if (itemIsSeparator(item)) { |
| addClass(TD, 'htSeparator'); |
| } else if (typeof item.renderer === 'function') { |
| addClass(TD, 'htCustomMenuRenderer'); |
| TD.appendChild(item.renderer(hot, wrapper, row, col, prop, value)); |
| } else { |
| fastInnerHTML(wrapper, value); |
| } |
| if (itemIsDisabled(item)) { |
| addClass(TD, 'htDisabled'); |
| this.eventManager.addEventListener(TD, 'mouseenter', (function() { |
| return hot.deselectCell(); |
| })); |
| } else if (itemIsSelectionDisabled(item)) { |
| addClass(TD, 'htSelectionDisabled'); |
| this.eventManager.addEventListener(TD, 'mouseenter', (function() { |
| return hot.deselectCell(); |
| })); |
| } else if (isSubMenu(item)) { |
| addClass(TD, 'htSubmenu'); |
| if (itemIsSelectionDisabled(item)) { |
| this.eventManager.addEventListener(TD, 'mouseenter', (function() { |
| return hot.deselectCell(); |
| })); |
| } else { |
| this.eventManager.addEventListener(TD, 'mouseenter', (function() { |
| return hot.selectCell(row, col, void 0, void 0, false, false); |
| })); |
| } |
| } else { |
| removeClass(TD, 'htSubmenu'); |
| removeClass(TD, 'htDisabled'); |
| if (itemIsSelectionDisabled(item)) { |
| this.eventManager.addEventListener(TD, 'mouseenter', (function() { |
| return hot.deselectCell(); |
| })); |
| } else { |
| this.eventManager.addEventListener(TD, 'mouseenter', (function() { |
| return hot.selectCell(row, col, void 0, void 0, false, false); |
| })); |
| } |
| } |
| }, |
| createContainer: function() { |
| var name = arguments[0] !== (void 0) ? arguments[0] : null; |
| if (name) { |
| name = name.replace(/ /g, '_'); |
| name = this.options.className + 'Sub_' + name; |
| } |
| var container; |
| if (name) { |
| container = document.querySelector('.' + this.options.className + '.' + name); |
| } else { |
| container = document.querySelector('.' + this.options.className); |
| } |
| if (!container) { |
| container = document.createElement('div'); |
| addClass(container, 'htMenu ' + this.options.className); |
| if (name) { |
| addClass(container, name); |
| } |
| document.getElementsByTagName('body')[0].appendChild(container); |
| } |
| return container; |
| }, |
| blockMainTableCallbacks: function() { |
| this._afterScrollCallback = function() {}; |
| this.hot.addHook('afterScrollVertically', this._afterScrollCallback); |
| this.hot.addHook('afterScrollHorizontally', this._afterScrollCallback); |
| }, |
| releaseMainTableCallbacks: function() { |
| if (this._afterScrollCallback) { |
| this.hot.removeHook('afterScrollVertically', this._afterScrollCallback); |
| this.hot.removeHook('afterScrollHorizontally', this._afterScrollCallback); |
| this._afterScrollCallback = null; |
| } |
| }, |
| onBeforeKeyDown: function(event) { |
| var selection = this.hotMenu.getSelected(); |
| var stopEvent = false; |
| switch (event.keyCode) { |
| case KEY_CODES.ESCAPE: |
| this.close(); |
| stopEvent = true; |
| break; |
| case KEY_CODES.ENTER: |
| if (selection) { |
| if (this.hotMenu.getSourceDataAtRow(selection[0]).submenu) { |
| stopEvent = true; |
| } else { |
| this.executeCommand(event); |
| this.close(true); |
| } |
| } |
| break; |
| case KEY_CODES.ARROW_DOWN: |
| if (selection) { |
| this.selectNextCell(selection[0], selection[1]); |
| } else { |
| this.selectFirstCell(); |
| } |
| stopEvent = true; |
| break; |
| case KEY_CODES.ARROW_UP: |
| if (selection) { |
| this.selectPrevCell(selection[0], selection[1]); |
| } else { |
| this.selectLastCell(); |
| } |
| stopEvent = true; |
| break; |
| case KEY_CODES.ARROW_RIGHT: |
| if (selection) { |
| var menu = this.openSubMenu(selection[0]); |
| if (menu) { |
| menu.selectFirstCell(); |
| } |
| } |
| stopEvent = true; |
| break; |
| case KEY_CODES.ARROW_LEFT: |
| if (selection && this.isSubMenu()) { |
| this.close(); |
| if (this.parentMenu) { |
| this.parentMenu.hotMenu.listen(); |
| } |
| stopEvent = true; |
| } |
| break; |
| } |
| if (stopEvent) { |
| event.preventDefault(); |
| stopImmediatePropagation(event); |
| } |
| }, |
| onAfterInit: function() { |
| var data = this.hotMenu.getSettings().data; |
| var hiderStyle = this.hotMenu.view.wt.wtTable.hider.style; |
| var holderStyle = this.hotMenu.view.wt.wtTable.holder.style; |
| var currentHiderWidth = parseInt(hiderStyle.width, 10); |
| var realHeight = arrayReduce(data, (function(accumulator, value) { |
| return accumulator + (value.name === SEPARATOR ? 1 : 26); |
| }), 0); |
| holderStyle.width = currentHiderWidth + 22 + 'px'; |
| holderStyle.height = realHeight + 4 + 'px'; |
| }, |
| onDocumentMouseDown: function(event) { |
| if (!this.isOpened()) { |
| return; |
| } |
| if (this.container && isChildOf(event.target, this.container)) { |
| this.executeCommand(event); |
| } |
| if (this.options.standalone && this.hotMenu && !isChildOf(event.target, this.hotMenu.rootElement)) { |
| this.close(true); |
| } else if ((this.isAllSubMenusClosed() || this.isSubMenu()) && (!isChildOf(event.target, '.htMenu') && isChildOf(event.target, document))) { |
| this.close(true); |
| } |
| } |
| }, {}); |
| mixin(Menu, localHooks); |
| ; |
| |
| //# |
| },{"browser":24,"cursor":70,"eventManager":42,"helpers/array":43,"helpers/dom/element":47,"helpers/dom/event":48,"helpers/function":50,"helpers/object":53,"helpers/unicode":56,"mixins/localHooks":57,"predefinedItems":73,"utils":86}],73:[function(_dereq_,module,exports){ |
| "use strict"; |
| var $__13; |
| Object.defineProperties(exports, { |
| ALIGNMENT: {get: function() { |
| return $__predefinedItems_47_alignment__.KEY; |
| }}, |
| CLEAR_COLUMN: {get: function() { |
| return $__predefinedItems_47_clearColumn__.KEY; |
| }}, |
| COLUMN_LEFT: {get: function() { |
| return $__predefinedItems_47_columnLeft__.KEY; |
| }}, |
| COLUMN_RIGHT: {get: function() { |
| return $__predefinedItems_47_columnRight__.KEY; |
| }}, |
| READ_ONLY: {get: function() { |
| return $__predefinedItems_47_readOnly__.KEY; |
| }}, |
| REDO: {get: function() { |
| return $__predefinedItems_47_redo__.KEY; |
| }}, |
| REMOVE_COLUMN: {get: function() { |
| return $__predefinedItems_47_removeColumn__.KEY; |
| }}, |
| REMOVE_ROW: {get: function() { |
| return $__predefinedItems_47_removeRow__.KEY; |
| }}, |
| ROW_ABOVE: {get: function() { |
| return $__predefinedItems_47_rowAbove__.KEY; |
| }}, |
| ROW_BELOW: {get: function() { |
| return $__predefinedItems_47_rowBelow__.KEY; |
| }}, |
| SEPARATOR: {get: function() { |
| return $__predefinedItems_47_separator__.KEY; |
| }}, |
| UNDO: {get: function() { |
| return $__predefinedItems_47_undo__.KEY; |
| }}, |
| ITEMS: {get: function() { |
| return ITEMS; |
| }}, |
| predefinedItems: {get: function() { |
| return predefinedItems; |
| }}, |
| addItem: {get: function() { |
| return addItem; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_helpers_47_object__, |
| $__predefinedItems_47_alignment__, |
| $__predefinedItems_47_clearColumn__, |
| $__predefinedItems_47_columnLeft__, |
| $__predefinedItems_47_columnRight__, |
| $__predefinedItems_47_readOnly__, |
| $__predefinedItems_47_redo__, |
| $__predefinedItems_47_removeColumn__, |
| $__predefinedItems_47_removeRow__, |
| $__predefinedItems_47_rowAbove__, |
| $__predefinedItems_47_rowBelow__, |
| $__predefinedItems_47_separator__, |
| $__predefinedItems_47_undo__, |
| $__predefinedItems_47_alignment__, |
| $__predefinedItems_47_clearColumn__, |
| $__predefinedItems_47_columnLeft__, |
| $__predefinedItems_47_columnRight__, |
| $__predefinedItems_47_readOnly__, |
| $__predefinedItems_47_redo__, |
| $__predefinedItems_47_removeColumn__, |
| $__predefinedItems_47_removeRow__, |
| $__predefinedItems_47_rowAbove__, |
| $__predefinedItems_47_rowBelow__, |
| $__predefinedItems_47_separator__, |
| $__predefinedItems_47_undo__; |
| var objectEach = ($___46__46__47__46__46__47_helpers_47_object__ = _dereq_("helpers/object"), $___46__46__47__46__46__47_helpers_47_object__ && $___46__46__47__46__46__47_helpers_47_object__.__esModule && $___46__46__47__46__46__47_helpers_47_object__ || {default: $___46__46__47__46__46__47_helpers_47_object__}).objectEach; |
| var $__1 = ($__predefinedItems_47_alignment__ = _dereq_("predefinedItems/alignment"), $__predefinedItems_47_alignment__ && $__predefinedItems_47_alignment__.__esModule && $__predefinedItems_47_alignment__ || {default: $__predefinedItems_47_alignment__}), |
| alignmentItem = $__1.alignmentItem, |
| ALIGNMENT = $__1.KEY; |
| var $__2 = ($__predefinedItems_47_clearColumn__ = _dereq_("predefinedItems/clearColumn"), $__predefinedItems_47_clearColumn__ && $__predefinedItems_47_clearColumn__.__esModule && $__predefinedItems_47_clearColumn__ || {default: $__predefinedItems_47_clearColumn__}), |
| clearColumnItem = $__2.clearColumnItem, |
| CLEAR_COLUMN = $__2.KEY; |
| var $__3 = ($__predefinedItems_47_columnLeft__ = _dereq_("predefinedItems/columnLeft"), $__predefinedItems_47_columnLeft__ && $__predefinedItems_47_columnLeft__.__esModule && $__predefinedItems_47_columnLeft__ || {default: $__predefinedItems_47_columnLeft__}), |
| columnLeftItem = $__3.columnLeftItem, |
| COLUMN_LEFT = $__3.KEY; |
| var $__4 = ($__predefinedItems_47_columnRight__ = _dereq_("predefinedItems/columnRight"), $__predefinedItems_47_columnRight__ && $__predefinedItems_47_columnRight__.__esModule && $__predefinedItems_47_columnRight__ || {default: $__predefinedItems_47_columnRight__}), |
| columnRightItem = $__4.columnRightItem, |
| COLUMN_RIGHT = $__4.KEY; |
| var $__5 = ($__predefinedItems_47_readOnly__ = _dereq_("predefinedItems/readOnly"), $__predefinedItems_47_readOnly__ && $__predefinedItems_47_readOnly__.__esModule && $__predefinedItems_47_readOnly__ || {default: $__predefinedItems_47_readOnly__}), |
| readOnlyItem = $__5.readOnlyItem, |
| READ_ONLY = $__5.KEY; |
| var $__6 = ($__predefinedItems_47_redo__ = _dereq_("predefinedItems/redo"), $__predefinedItems_47_redo__ && $__predefinedItems_47_redo__.__esModule && $__predefinedItems_47_redo__ || {default: $__predefinedItems_47_redo__}), |
| redoItem = $__6.redoItem, |
| REDO = $__6.KEY; |
| var $__7 = ($__predefinedItems_47_removeColumn__ = _dereq_("predefinedItems/removeColumn"), $__predefinedItems_47_removeColumn__ && $__predefinedItems_47_removeColumn__.__esModule && $__predefinedItems_47_removeColumn__ || {default: $__predefinedItems_47_removeColumn__}), |
| removeColumnItem = $__7.removeColumnItem, |
| REMOVE_COLUMN = $__7.KEY; |
| var $__8 = ($__predefinedItems_47_removeRow__ = _dereq_("predefinedItems/removeRow"), $__predefinedItems_47_removeRow__ && $__predefinedItems_47_removeRow__.__esModule && $__predefinedItems_47_removeRow__ || {default: $__predefinedItems_47_removeRow__}), |
| removeRowItem = $__8.removeRowItem, |
| REMOVE_ROW = $__8.KEY; |
| var $__9 = ($__predefinedItems_47_rowAbove__ = _dereq_("predefinedItems/rowAbove"), $__predefinedItems_47_rowAbove__ && $__predefinedItems_47_rowAbove__.__esModule && $__predefinedItems_47_rowAbove__ || {default: $__predefinedItems_47_rowAbove__}), |
| rowAboveItem = $__9.rowAboveItem, |
| ROW_ABOVE = $__9.KEY; |
| var $__10 = ($__predefinedItems_47_rowBelow__ = _dereq_("predefinedItems/rowBelow"), $__predefinedItems_47_rowBelow__ && $__predefinedItems_47_rowBelow__.__esModule && $__predefinedItems_47_rowBelow__ || {default: $__predefinedItems_47_rowBelow__}), |
| rowBelowItem = $__10.rowBelowItem, |
| ROW_BELOW = $__10.KEY; |
| var $__11 = ($__predefinedItems_47_separator__ = _dereq_("predefinedItems/separator"), $__predefinedItems_47_separator__ && $__predefinedItems_47_separator__.__esModule && $__predefinedItems_47_separator__ || {default: $__predefinedItems_47_separator__}), |
| separatorItem = $__11.separatorItem, |
| SEPARATOR = $__11.KEY; |
| var $__12 = ($__predefinedItems_47_undo__ = _dereq_("predefinedItems/undo"), $__predefinedItems_47_undo__ && $__predefinedItems_47_undo__.__esModule && $__predefinedItems_47_undo__ || {default: $__predefinedItems_47_undo__}), |
| undoItem = $__12.undoItem, |
| UNDO = $__12.KEY; |
| var $__predefinedItems_47_alignment__ = ($__predefinedItems_47_alignment__ = _dereq_("predefinedItems/alignment"), $__predefinedItems_47_alignment__ && $__predefinedItems_47_alignment__.__esModule && $__predefinedItems_47_alignment__ || {default: $__predefinedItems_47_alignment__}); |
| var $__predefinedItems_47_clearColumn__ = ($__predefinedItems_47_clearColumn__ = _dereq_("predefinedItems/clearColumn"), $__predefinedItems_47_clearColumn__ && $__predefinedItems_47_clearColumn__.__esModule && $__predefinedItems_47_clearColumn__ || {default: $__predefinedItems_47_clearColumn__}); |
| var $__predefinedItems_47_columnLeft__ = ($__predefinedItems_47_columnLeft__ = _dereq_("predefinedItems/columnLeft"), $__predefinedItems_47_columnLeft__ && $__predefinedItems_47_columnLeft__.__esModule && $__predefinedItems_47_columnLeft__ || {default: $__predefinedItems_47_columnLeft__}); |
| var $__predefinedItems_47_columnRight__ = ($__predefinedItems_47_columnRight__ = _dereq_("predefinedItems/columnRight"), $__predefinedItems_47_columnRight__ && $__predefinedItems_47_columnRight__.__esModule && $__predefinedItems_47_columnRight__ || {default: $__predefinedItems_47_columnRight__}); |
| var $__predefinedItems_47_readOnly__ = ($__predefinedItems_47_readOnly__ = _dereq_("predefinedItems/readOnly"), $__predefinedItems_47_readOnly__ && $__predefinedItems_47_readOnly__.__esModule && $__predefinedItems_47_readOnly__ || {default: $__predefinedItems_47_readOnly__}); |
| var $__predefinedItems_47_redo__ = ($__predefinedItems_47_redo__ = _dereq_("predefinedItems/redo"), $__predefinedItems_47_redo__ && $__predefinedItems_47_redo__.__esModule && $__predefinedItems_47_redo__ || {default: $__predefinedItems_47_redo__}); |
| var $__predefinedItems_47_removeColumn__ = ($__predefinedItems_47_removeColumn__ = _dereq_("predefinedItems/removeColumn"), $__predefinedItems_47_removeColumn__ && $__predefinedItems_47_removeColumn__.__esModule && $__predefinedItems_47_removeColumn__ || {default: $__predefinedItems_47_removeColumn__}); |
| var $__predefinedItems_47_removeRow__ = ($__predefinedItems_47_removeRow__ = _dereq_("predefinedItems/removeRow"), $__predefinedItems_47_removeRow__ && $__predefinedItems_47_removeRow__.__esModule && $__predefinedItems_47_removeRow__ || {default: $__predefinedItems_47_removeRow__}); |
| var $__predefinedItems_47_rowAbove__ = ($__predefinedItems_47_rowAbove__ = _dereq_("predefinedItems/rowAbove"), $__predefinedItems_47_rowAbove__ && $__predefinedItems_47_rowAbove__.__esModule && $__predefinedItems_47_rowAbove__ || {default: $__predefinedItems_47_rowAbove__}); |
| var $__predefinedItems_47_rowBelow__ = ($__predefinedItems_47_rowBelow__ = _dereq_("predefinedItems/rowBelow"), $__predefinedItems_47_rowBelow__ && $__predefinedItems_47_rowBelow__.__esModule && $__predefinedItems_47_rowBelow__ || {default: $__predefinedItems_47_rowBelow__}); |
| var $__predefinedItems_47_separator__ = ($__predefinedItems_47_separator__ = _dereq_("predefinedItems/separator"), $__predefinedItems_47_separator__ && $__predefinedItems_47_separator__.__esModule && $__predefinedItems_47_separator__ || {default: $__predefinedItems_47_separator__}); |
| var $__predefinedItems_47_undo__ = ($__predefinedItems_47_undo__ = _dereq_("predefinedItems/undo"), $__predefinedItems_47_undo__ && $__predefinedItems_47_undo__.__esModule && $__predefinedItems_47_undo__ || {default: $__predefinedItems_47_undo__}); |
| var ITEMS = [ROW_ABOVE, ROW_BELOW, COLUMN_LEFT, COLUMN_RIGHT, CLEAR_COLUMN, REMOVE_ROW, REMOVE_COLUMN, UNDO, REDO, READ_ONLY, ALIGNMENT, SEPARATOR]; |
| var _predefinedItems = ($__13 = {}, Object.defineProperty($__13, SEPARATOR, { |
| value: separatorItem, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__13, ROW_ABOVE, { |
| value: rowAboveItem, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__13, ROW_BELOW, { |
| value: rowBelowItem, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__13, COLUMN_LEFT, { |
| value: columnLeftItem, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__13, COLUMN_RIGHT, { |
| value: columnRightItem, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__13, CLEAR_COLUMN, { |
| value: clearColumnItem, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__13, REMOVE_ROW, { |
| value: removeRowItem, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__13, REMOVE_COLUMN, { |
| value: removeColumnItem, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__13, UNDO, { |
| value: undoItem, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__13, REDO, { |
| value: redoItem, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__13, READ_ONLY, { |
| value: readOnlyItem, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__13, ALIGNMENT, { |
| value: alignmentItem, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), $__13); |
| function predefinedItems() { |
| var items = {}; |
| objectEach(_predefinedItems, (function(itemFactory, key) { |
| return items[key] = itemFactory(); |
| })); |
| return items; |
| } |
| function addItem(key, item) { |
| if (ITEMS.indexOf(key) === -1) { |
| _predefinedItems[key] = item; |
| } |
| } |
| |
| //# |
| },{"helpers/object":53,"predefinedItems/alignment":74,"predefinedItems/clearColumn":75,"predefinedItems/columnLeft":76,"predefinedItems/columnRight":77,"predefinedItems/readOnly":78,"predefinedItems/redo":79,"predefinedItems/removeColumn":80,"predefinedItems/removeRow":81,"predefinedItems/rowAbove":82,"predefinedItems/rowBelow":83,"predefinedItems/separator":84,"predefinedItems/undo":85}],74:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| KEY: {get: function() { |
| return KEY; |
| }}, |
| alignmentItem: {get: function() { |
| return alignmentItem; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_utils__, |
| $__separator__; |
| var $__0 = ($___46__46__47_utils__ = _dereq_("utils"), $___46__46__47_utils__ && $___46__46__47_utils__.__esModule && $___46__46__47_utils__ || {default: $___46__46__47_utils__}), |
| align = $__0.align, |
| getAlignmentClasses = $__0.getAlignmentClasses, |
| checkSelectionConsistency = $__0.checkSelectionConsistency, |
| markLabelAsSelected = $__0.markLabelAsSelected; |
| var SEPARATOR = ($__separator__ = _dereq_("separator"), $__separator__ && $__separator__.__esModule && $__separator__ || {default: $__separator__}).KEY; |
| var KEY = 'alignment'; |
| function alignmentItem() { |
| return { |
| key: KEY, |
| name: 'Alignment', |
| disabled: function() { |
| return this.getSelectedRange() && !this.selection.selectedHeader.corner ? false : true; |
| }, |
| submenu: {items: [{ |
| key: (KEY + ":left"), |
| name: function() { |
| var $__2 = this; |
| var label = 'Left'; |
| var hasClass = checkSelectionConsistency(this.getSelectedRange(), (function(row, col) { |
| var className = $__2.getCellMeta(row, col).className; |
| if (className && className.indexOf('htLeft') !== -1) { |
| return true; |
| } |
| })); |
| if (hasClass) { |
| label = markLabelAsSelected(label); |
| } |
| return label; |
| }, |
| callback: function() { |
| var $__2 = this; |
| var range = this.getSelectedRange(); |
| var stateBefore = getAlignmentClasses(range, (function(row, col) { |
| return $__2.getCellMeta(row, col).className; |
| })); |
| var type = 'horizontal'; |
| var alignment = 'htLeft'; |
| this.runHooks('beforeCellAlignment', stateBefore, range, type, alignment); |
| align(range, type, alignment, (function(row, col) { |
| return $__2.getCellMeta(row, col); |
| })); |
| this.render(); |
| }, |
| disabled: false |
| }, { |
| key: (KEY + ":center"), |
| name: function() { |
| var $__2 = this; |
| var label = 'Center'; |
| var hasClass = checkSelectionConsistency(this.getSelectedRange(), (function(row, col) { |
| var className = $__2.getCellMeta(row, col).className; |
| if (className && className.indexOf('htCenter') !== -1) { |
| return true; |
| } |
| })); |
| if (hasClass) { |
| label = markLabelAsSelected(label); |
| } |
| return label; |
| }, |
| callback: function() { |
| var $__2 = this; |
| var range = this.getSelectedRange(); |
| var stateBefore = getAlignmentClasses(range, (function(row, col) { |
| return $__2.getCellMeta(row, col).className; |
| })); |
| var type = 'horizontal'; |
| var alignment = 'htCenter'; |
| this.runHooks('beforeCellAlignment', stateBefore, range, type, alignment); |
| align(range, type, alignment, (function(row, col) { |
| return $__2.getCellMeta(row, col); |
| })); |
| this.render(); |
| }, |
| disabled: false |
| }, { |
| key: (KEY + ":right"), |
| name: function() { |
| var $__2 = this; |
| var label = 'Right'; |
| var hasClass = checkSelectionConsistency(this.getSelectedRange(), (function(row, col) { |
| var className = $__2.getCellMeta(row, col).className; |
| if (className && className.indexOf('htRight') !== -1) { |
| return true; |
| } |
| })); |
| if (hasClass) { |
| label = markLabelAsSelected(label); |
| } |
| return label; |
| }, |
| callback: function() { |
| var $__2 = this; |
| var range = this.getSelectedRange(); |
| var stateBefore = getAlignmentClasses(range, (function(row, col) { |
| return $__2.getCellMeta(row, col).className; |
| })); |
| var type = 'horizontal'; |
| var alignment = 'htRight'; |
| this.runHooks('beforeCellAlignment', stateBefore, range, type, alignment); |
| align(range, type, alignment, (function(row, col) { |
| return $__2.getCellMeta(row, col); |
| })); |
| this.render(); |
| }, |
| disabled: false |
| }, { |
| key: (KEY + ":justify"), |
| name: function() { |
| var $__2 = this; |
| var label = 'Justify'; |
| var hasClass = checkSelectionConsistency(this.getSelectedRange(), (function(row, col) { |
| var className = $__2.getCellMeta(row, col).className; |
| if (className && className.indexOf('htJustify') !== -1) { |
| return true; |
| } |
| })); |
| if (hasClass) { |
| label = markLabelAsSelected(label); |
| } |
| return label; |
| }, |
| callback: function() { |
| var $__2 = this; |
| var range = this.getSelectedRange(); |
| var stateBefore = getAlignmentClasses(range, (function(row, col) { |
| return $__2.getCellMeta(row, col).className; |
| })); |
| var type = 'horizontal'; |
| var alignment = 'htJustify'; |
| this.runHooks('beforeCellAlignment', stateBefore, range, type, alignment); |
| align(range, type, alignment, (function(row, col) { |
| return $__2.getCellMeta(row, col); |
| })); |
| this.render(); |
| }, |
| disabled: false |
| }, {name: SEPARATOR}, { |
| key: (KEY + ":top"), |
| name: function() { |
| var $__2 = this; |
| var label = 'Top'; |
| var hasClass = checkSelectionConsistency(this.getSelectedRange(), (function(row, col) { |
| var className = $__2.getCellMeta(row, col).className; |
| if (className && className.indexOf('htTop') !== -1) { |
| return true; |
| } |
| })); |
| if (hasClass) { |
| label = markLabelAsSelected(label); |
| } |
| return label; |
| }, |
| callback: function() { |
| var $__2 = this; |
| var range = this.getSelectedRange(); |
| var stateBefore = getAlignmentClasses(range, (function(row, col) { |
| return $__2.getCellMeta(row, col).className; |
| })); |
| var type = 'vertical'; |
| var alignment = 'htTop'; |
| this.runHooks('beforeCellAlignment', stateBefore, range, type, alignment); |
| align(range, type, alignment, (function(row, col) { |
| return $__2.getCellMeta(row, col); |
| })); |
| this.render(); |
| }, |
| disabled: false |
| }, { |
| key: (KEY + ":middle"), |
| name: function() { |
| var $__2 = this; |
| var label = 'Middle'; |
| var hasClass = checkSelectionConsistency(this.getSelectedRange(), (function(row, col) { |
| var className = $__2.getCellMeta(row, col).className; |
| if (className && className.indexOf('htMiddle') !== -1) { |
| return true; |
| } |
| })); |
| if (hasClass) { |
| label = markLabelAsSelected(label); |
| } |
| return label; |
| }, |
| callback: function() { |
| var $__2 = this; |
| var range = this.getSelectedRange(); |
| var stateBefore = getAlignmentClasses(range, (function(row, col) { |
| return $__2.getCellMeta(row, col).className; |
| })); |
| var type = 'vertical'; |
| var alignment = 'htMiddle'; |
| this.runHooks('beforeCellAlignment', stateBefore, range, type, alignment); |
| align(range, type, alignment, (function(row, col) { |
| return $__2.getCellMeta(row, col); |
| })); |
| this.render(); |
| }, |
| disabled: false |
| }, { |
| key: (KEY + ":bottom"), |
| name: function() { |
| var $__2 = this; |
| var label = 'Bottom'; |
| var hasClass = checkSelectionConsistency(this.getSelectedRange(), (function(row, col) { |
| var className = $__2.getCellMeta(row, col).className; |
| if (className && className.indexOf('htBottom') !== -1) { |
| return true; |
| } |
| })); |
| if (hasClass) { |
| label = markLabelAsSelected(label); |
| } |
| return label; |
| }, |
| callback: function() { |
| var $__2 = this; |
| var range = this.getSelectedRange(); |
| var stateBefore = getAlignmentClasses(range, (function(row, col) { |
| return $__2.getCellMeta(row, col).className; |
| })); |
| var type = 'vertical'; |
| var alignment = 'htBottom'; |
| this.runHooks('beforeCellAlignment', stateBefore, range, type, alignment); |
| align(range, type, alignment, (function(row, col) { |
| return $__2.getCellMeta(row, col); |
| })); |
| this.render(); |
| }, |
| disabled: false |
| }]} |
| }; |
| } |
| |
| //# |
| },{"separator":84,"utils":86}],75:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| KEY: {get: function() { |
| return KEY; |
| }}, |
| clearColumnItem: {get: function() { |
| return clearColumnItem; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_utils__; |
| var getValidSelection = ($___46__46__47_utils__ = _dereq_("utils"), $___46__46__47_utils__ && $___46__46__47_utils__.__esModule && $___46__46__47_utils__ || {default: $___46__46__47_utils__}).getValidSelection; |
| var KEY = 'clear_column'; |
| function clearColumnItem() { |
| return { |
| key: KEY, |
| name: 'Clear column', |
| callback: function(key, selection) { |
| var column = selection.start.col; |
| if (this.countRows()) { |
| this.populateFromArray(0, column, [[null]], Math.max(selection.start.row, selection.end.row), column); |
| } |
| }, |
| disabled: function() { |
| var selected = getValidSelection(this); |
| if (!selected) { |
| return true; |
| } |
| var entireRowSelection = [selected[0], 0, selected[0], this.countCols() - 1]; |
| var rowSelected = entireRowSelection.join(',') == selected.join(','); |
| return selected[1] < 0 || this.countCols() >= this.getSettings().maxCols || rowSelected; |
| } |
| }; |
| } |
| |
| //# |
| },{"utils":86}],76:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| KEY: {get: function() { |
| return KEY; |
| }}, |
| columnLeftItem: {get: function() { |
| return columnLeftItem; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_utils__; |
| var getValidSelection = ($___46__46__47_utils__ = _dereq_("utils"), $___46__46__47_utils__ && $___46__46__47_utils__.__esModule && $___46__46__47_utils__ || {default: $___46__46__47_utils__}).getValidSelection; |
| var KEY = 'col_left'; |
| function columnLeftItem() { |
| return { |
| key: KEY, |
| name: 'Insert column on the left', |
| callback: function(key, selection) { |
| this.alter('insert_col', selection.start.col); |
| }, |
| disabled: function() { |
| var selected = getValidSelection(this); |
| if (!selected) { |
| return true; |
| } |
| if (!this.isColumnModificationAllowed()) { |
| return true; |
| } |
| var entireRowSelection = [selected[0], 0, selected[0], this.countCols() - 1]; |
| var rowSelected = entireRowSelection.join(',') == selected.join(','); |
| var onlyOneColumn = this.countCols() === 1; |
| return selected[1] < 0 || this.countCols() >= this.getSettings().maxCols || (!onlyOneColumn && rowSelected); |
| }, |
| hidden: function() { |
| return !this.getSettings().allowInsertColumn; |
| } |
| }; |
| } |
| |
| //# |
| },{"utils":86}],77:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| KEY: {get: function() { |
| return KEY; |
| }}, |
| columnRightItem: {get: function() { |
| return columnRightItem; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_utils__; |
| var getValidSelection = ($___46__46__47_utils__ = _dereq_("utils"), $___46__46__47_utils__ && $___46__46__47_utils__.__esModule && $___46__46__47_utils__ || {default: $___46__46__47_utils__}).getValidSelection; |
| var KEY = 'col_right'; |
| function columnRightItem() { |
| return { |
| key: KEY, |
| name: 'Insert column on the right', |
| callback: function(key, selection) { |
| this.alter('insert_col', selection.end.col + 1); |
| }, |
| disabled: function() { |
| var selected = getValidSelection(this); |
| if (!selected) { |
| return true; |
| } |
| if (!this.isColumnModificationAllowed()) { |
| return true; |
| } |
| var entireRowSelection = [selected[0], 0, selected[0], this.countCols() - 1]; |
| var rowSelected = entireRowSelection.join(',') == selected.join(','); |
| var onlyOneColumn = this.countCols() === 1; |
| return selected[1] < 0 || this.countCols() >= this.getSettings().maxCols || (!onlyOneColumn && rowSelected); |
| }, |
| hidden: function() { |
| return !this.getSettings().allowInsertColumn; |
| } |
| }; |
| } |
| |
| //# |
| },{"utils":86}],78:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| KEY: {get: function() { |
| return KEY; |
| }}, |
| readOnlyItem: {get: function() { |
| return readOnlyItem; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_utils__; |
| var $__0 = ($___46__46__47_utils__ = _dereq_("utils"), $___46__46__47_utils__ && $___46__46__47_utils__.__esModule && $___46__46__47_utils__ || {default: $___46__46__47_utils__}), |
| checkSelectionConsistency = $__0.checkSelectionConsistency, |
| markLabelAsSelected = $__0.markLabelAsSelected; |
| var KEY = 'make_read_only'; |
| function readOnlyItem() { |
| return { |
| key: KEY, |
| name: function() { |
| var $__1 = this; |
| var label = 'Read only'; |
| var atLeastOneReadOnly = checkSelectionConsistency(this.getSelectedRange(), (function(row, col) { |
| return $__1.getCellMeta(row, col).readOnly; |
| })); |
| if (atLeastOneReadOnly) { |
| label = markLabelAsSelected(label); |
| } |
| return label; |
| }, |
| callback: function() { |
| var $__1 = this; |
| var range = this.getSelectedRange(); |
| var atLeastOneReadOnly = checkSelectionConsistency(range, (function(row, col) { |
| return $__1.getCellMeta(row, col).readOnly; |
| })); |
| range.forAll((function(row, col) { |
| $__1.getCellMeta(row, col).readOnly = atLeastOneReadOnly ? false : true; |
| })); |
| this.render(); |
| }, |
| disabled: function() { |
| return this.getSelectedRange() && !this.selection.selectedHeader.corner ? false : true; |
| } |
| }; |
| } |
| |
| //# |
| },{"utils":86}],79:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| KEY: {get: function() { |
| return KEY; |
| }}, |
| redoItem: {get: function() { |
| return redoItem; |
| }}, |
| __esModule: {value: true} |
| }); |
| var KEY = 'redo'; |
| function redoItem() { |
| return { |
| key: KEY, |
| name: 'Redo', |
| callback: function() { |
| this.redo(); |
| }, |
| disabled: function() { |
| return this.undoRedo && !this.undoRedo.isRedoAvailable(); |
| } |
| }; |
| } |
| |
| //# |
| },{}],80:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| KEY: {get: function() { |
| return KEY; |
| }}, |
| removeColumnItem: {get: function() { |
| return removeColumnItem; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_utils__; |
| var getValidSelection = ($___46__46__47_utils__ = _dereq_("utils"), $___46__46__47_utils__ && $___46__46__47_utils__.__esModule && $___46__46__47_utils__ || {default: $___46__46__47_utils__}).getValidSelection; |
| var KEY = 'remove_col'; |
| function removeColumnItem() { |
| return { |
| key: KEY, |
| name: 'Remove column', |
| callback: function(key, selection) { |
| var amount = selection.end.col - selection.start.col + 1; |
| this.alter('remove_col', selection.start.col, amount); |
| }, |
| disabled: function() { |
| var selected = getValidSelection(this); |
| var totalColumns = this.countCols(); |
| return !selected || this.selection.selectedHeader.rows || this.selection.selectedHeader.corner || !this.isColumnModificationAllowed() || !totalColumns; |
| }, |
| hidden: function() { |
| return !this.getSettings().allowRemoveColumn; |
| } |
| }; |
| } |
| |
| //# |
| },{"utils":86}],81:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| KEY: {get: function() { |
| return KEY; |
| }}, |
| removeRowItem: {get: function() { |
| return removeRowItem; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_utils__; |
| var getValidSelection = ($___46__46__47_utils__ = _dereq_("utils"), $___46__46__47_utils__ && $___46__46__47_utils__.__esModule && $___46__46__47_utils__ || {default: $___46__46__47_utils__}).getValidSelection; |
| var KEY = 'remove_row'; |
| function removeRowItem() { |
| return { |
| key: KEY, |
| name: 'Remove row', |
| callback: function(key, selection) { |
| var amount = selection.end.row - selection.start.row + 1; |
| this.alter('remove_row', selection.start.row, amount); |
| }, |
| disabled: function() { |
| var selected = getValidSelection(this); |
| var totalRows = this.countRows(); |
| return !selected || this.selection.selectedHeader.cols || this.selection.selectedHeader.corner || !totalRows; |
| }, |
| hidden: function() { |
| return !this.getSettings().allowRemoveRow; |
| } |
| }; |
| } |
| |
| //# |
| },{"utils":86}],82:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| KEY: {get: function() { |
| return KEY; |
| }}, |
| rowAboveItem: {get: function() { |
| return rowAboveItem; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_utils__; |
| var getValidSelection = ($___46__46__47_utils__ = _dereq_("utils"), $___46__46__47_utils__ && $___46__46__47_utils__.__esModule && $___46__46__47_utils__ || {default: $___46__46__47_utils__}).getValidSelection; |
| var KEY = 'row_above'; |
| function rowAboveItem() { |
| return { |
| key: KEY, |
| name: 'Insert row above', |
| callback: function(key, selection) { |
| this.alter('insert_row', selection.start.row); |
| }, |
| disabled: function() { |
| var selected = getValidSelection(this); |
| return !selected || this.selection.selectedHeader.cols || this.countRows() >= this.getSettings().maxRows; |
| }, |
| hidden: function() { |
| return !this.getSettings().allowInsertRow; |
| } |
| }; |
| } |
| |
| //# |
| },{"utils":86}],83:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| KEY: {get: function() { |
| return KEY; |
| }}, |
| rowBelowItem: {get: function() { |
| return rowBelowItem; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_utils__; |
| var getValidSelection = ($___46__46__47_utils__ = _dereq_("utils"), $___46__46__47_utils__ && $___46__46__47_utils__.__esModule && $___46__46__47_utils__ || {default: $___46__46__47_utils__}).getValidSelection; |
| var KEY = 'row_below'; |
| function rowBelowItem() { |
| return { |
| key: KEY, |
| name: 'Insert row below', |
| callback: function(key, selection) { |
| this.alter('insert_row', selection.end.row + 1); |
| }, |
| disabled: function() { |
| var selected = getValidSelection(this); |
| return !selected || this.selection.selectedHeader.cols || this.countRows() >= this.getSettings().maxRows; |
| }, |
| hidden: function() { |
| return !this.getSettings().allowInsertRow; |
| } |
| }; |
| } |
| |
| //# |
| },{"utils":86}],84:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| KEY: {get: function() { |
| return KEY; |
| }}, |
| separatorItem: {get: function() { |
| return separatorItem; |
| }}, |
| __esModule: {value: true} |
| }); |
| var KEY = '---------'; |
| function separatorItem() { |
| return {name: KEY}; |
| } |
| |
| //# |
| },{}],85:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| KEY: {get: function() { |
| return KEY; |
| }}, |
| undoItem: {get: function() { |
| return undoItem; |
| }}, |
| __esModule: {value: true} |
| }); |
| var KEY = 'undo'; |
| function undoItem() { |
| return { |
| key: KEY, |
| name: 'Undo', |
| callback: function() { |
| this.undo(); |
| }, |
| disabled: function() { |
| return this.undoRedo && !this.undoRedo.isUndoAvailable(); |
| } |
| }; |
| } |
| |
| //# |
| },{}],86:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| normalizeSelection: {get: function() { |
| return normalizeSelection; |
| }}, |
| isSeparator: {get: function() { |
| return isSeparator; |
| }}, |
| hasSubMenu: {get: function() { |
| return hasSubMenu; |
| }}, |
| isDisabled: {get: function() { |
| return isDisabled; |
| }}, |
| isSelectionDisabled: {get: function() { |
| return isSelectionDisabled; |
| }}, |
| getValidSelection: {get: function() { |
| return getValidSelection; |
| }}, |
| prepareVerticalAlignClass: {get: function() { |
| return prepareVerticalAlignClass; |
| }}, |
| prepareHorizontalAlignClass: {get: function() { |
| return prepareHorizontalAlignClass; |
| }}, |
| getAlignmentClasses: {get: function() { |
| return getAlignmentClasses; |
| }}, |
| align: {get: function() { |
| return align; |
| }}, |
| checkSelectionConsistency: {get: function() { |
| return checkSelectionConsistency; |
| }}, |
| markLabelAsSelected: {get: function() { |
| return markLabelAsSelected; |
| }}, |
| isItemHidden: {get: function() { |
| return isItemHidden; |
| }}, |
| filterSeparators: {get: function() { |
| return filterSeparators; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_helpers_47_array__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $__predefinedItems_47_separator__; |
| var arrayEach = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}).arrayEach; |
| var hasClass = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}).hasClass; |
| var SEPARATOR = ($__predefinedItems_47_separator__ = _dereq_("predefinedItems/separator"), $__predefinedItems_47_separator__ && $__predefinedItems_47_separator__.__esModule && $__predefinedItems_47_separator__ || {default: $__predefinedItems_47_separator__}).KEY; |
| function normalizeSelection(selRange) { |
| return { |
| start: selRange.getTopLeftCorner(), |
| end: selRange.getBottomRightCorner() |
| }; |
| } |
| function isSeparator(cell) { |
| return hasClass(cell, 'htSeparator'); |
| } |
| function hasSubMenu(cell) { |
| return hasClass(cell, 'htSubmenu'); |
| } |
| function isDisabled(cell) { |
| return hasClass(cell, 'htDisabled'); |
| } |
| function isSelectionDisabled(cell) { |
| return hasClass(cell, 'htSelectionDisabled'); |
| } |
| function getValidSelection(hot) { |
| var selected = hot.getSelected(); |
| if (!selected) { |
| return null; |
| } |
| if (selected[0] < 0) { |
| return null; |
| } |
| return selected; |
| } |
| function prepareVerticalAlignClass(className, alignment) { |
| if (className.indexOf(alignment) != -1) { |
| return className; |
| } |
| className = className.replace('htTop', '').replace('htMiddle', '').replace('htBottom', '').replace(' ', ''); |
| className += ' ' + alignment; |
| return className; |
| } |
| function prepareHorizontalAlignClass(className, alignment) { |
| if (className.indexOf(alignment) != -1) { |
| return className; |
| } |
| className = className.replace('htLeft', '').replace('htCenter', '').replace('htRight', '').replace('htJustify', '').replace(' ', ''); |
| className += ' ' + alignment; |
| return className; |
| } |
| function getAlignmentClasses(range, callback) { |
| var classes = {}; |
| for (var row = range.from.row; row <= range.to.row; row++) { |
| for (var col = range.from.col; col <= range.to.col; col++) { |
| if (!classes[row]) { |
| classes[row] = []; |
| } |
| classes[row][col] = callback(row, col); |
| } |
| } |
| return classes; |
| } |
| function align(range, type, alignment, cellDescriptor) { |
| if (range.from.row == range.to.row && range.from.col == range.to.col) { |
| applyAlignClassName(range.from.row, range.from.col, type, alignment, cellDescriptor); |
| } else { |
| for (var row = range.from.row; row <= range.to.row; row++) { |
| for (var col = range.from.col; col <= range.to.col; col++) { |
| applyAlignClassName(row, col, type, alignment, cellDescriptor); |
| } |
| } |
| } |
| } |
| function applyAlignClassName(row, col, type, alignment, cellDescriptor) { |
| var cellMeta = cellDescriptor(row, col); |
| var className = alignment; |
| if (cellMeta.className) { |
| if (type === 'vertical') { |
| className = prepareVerticalAlignClass(cellMeta.className, alignment); |
| } else { |
| className = prepareHorizontalAlignClass(cellMeta.className, alignment); |
| } |
| } |
| cellMeta.className = className; |
| } |
| function checkSelectionConsistency(range, comparator) { |
| var result = false; |
| if (range) { |
| range.forAll(function(row, col) { |
| if (comparator(row, col)) { |
| result = true; |
| return false; |
| } |
| }); |
| } |
| return result; |
| } |
| function markLabelAsSelected(label) { |
| return '<span class="selected">' + String.fromCharCode(10003) + '</span>' + label; |
| } |
| function isItemHidden(item, instance) { |
| return !item.hidden || !(typeof item.hidden == 'function' && item.hidden.call(instance)); |
| } |
| function shiftSeparators(items, separator) { |
| var result = items.slice(0); |
| for (var i = 0; i < result.length; ) { |
| if (result[i].name === separator) { |
| result.shift(); |
| } else { |
| break; |
| } |
| } |
| return result; |
| } |
| function popSeparators(items, separator) { |
| var result = items.slice(0); |
| result.reverse(); |
| result = shiftSeparators(result, separator); |
| result.reverse(); |
| return result; |
| } |
| function removeDuplicatedSeparators(items) { |
| var result = []; |
| arrayEach(items, (function(value, index) { |
| if (index > 0) { |
| if (result[result.length - 1].name !== value.name) { |
| result.push(value); |
| } |
| } else { |
| result.push(value); |
| } |
| })); |
| return result; |
| } |
| function filterSeparators(items) { |
| var separator = arguments[1] !== (void 0) ? arguments[1] : SEPARATOR; |
| var result = items.slice(0); |
| result = shiftSeparators(result, separator); |
| result = popSeparators(result, separator); |
| result = removeDuplicatedSeparators(result); |
| return result; |
| } |
| |
| //# |
| },{"helpers/array":43,"helpers/dom/element":47,"predefinedItems/separator":84}],87:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| ContextMenuCopyPaste: {get: function() { |
| return ContextMenuCopyPaste; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47_helpers_47_array__, |
| $___46__46__47__46__46__47_eventManager__, |
| $___46__46__47__46__46__47_plugins__, |
| $___46__46__47__95_base__, |
| $__zeroclipboard__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var removeClass = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}).removeClass; |
| var arrayEach = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}).arrayEach; |
| var EventManager = ($___46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47_eventManager__}).EventManager; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var BasePlugin = ($___46__46__47__95_base__ = _dereq_("_base"), $___46__46__47__95_base__ && $___46__46__47__95_base__.__esModule && $___46__46__47__95_base__ || {default: $___46__46__47__95_base__}).default; |
| var ZeroClipboard = ($__zeroclipboard__ = _dereq_("zeroclipboard"), $__zeroclipboard__ && $__zeroclipboard__.__esModule && $__zeroclipboard__ || {default: $__zeroclipboard__}).default; |
| var ContextMenuCopyPaste = function ContextMenuCopyPaste(hotInstance) { |
| $traceurRuntime.superConstructor($ContextMenuCopyPaste).call(this, hotInstance); |
| this.eventManager = new EventManager(this); |
| this.swfPath = null; |
| this.outsideClickDeselectsCache = null; |
| }; |
| var $ContextMenuCopyPaste = ContextMenuCopyPaste; |
| ($traceurRuntime.createClass)(ContextMenuCopyPaste, { |
| isEnabled: function() { |
| return this.hot.getSettings().contextMenuCopyPaste; |
| }, |
| enablePlugin: function() { |
| var $__7 = this; |
| if (this.enabled) { |
| return; |
| } |
| if (typeof this.hot.getSettings().contextMenuCopyPaste === 'object') { |
| this.swfPath = this.hot.getSettings().contextMenuCopyPaste.swfPath; |
| } |
| if (typeof ZeroClipboard === 'undefined') { |
| console.error('To be able to use the Copy/Paste feature from the context menu, you need to manually include ZeroClipboard.js file to your website.'); |
| } |
| try { |
| new ActiveXObject('ShockwaveFlash.ShockwaveFlash'); |
| } catch (exception) { |
| if (typeof navigator.mimeTypes['application/x-shockwave-flash'] == 'undefined') { |
| console.error('To be able to use the Copy/Paste feature from the context menu, your browser needs to have Flash Plugin installed.'); |
| } |
| } |
| if (this.swfPath) { |
| ZeroClipboard.config({swfPath: this.swfPath}); |
| } |
| this.hot.addHook('afterContextMenuShow', (function() { |
| return $__7.onAfterContextMenuShow(); |
| })); |
| this.hot.addHook('afterContextMenuDefaultOptions', (function(options) { |
| return $__7.onAfterContextMenuDefaultOptions(options); |
| })); |
| this.registerEvents(); |
| $traceurRuntime.superGet(this, $ContextMenuCopyPaste.prototype, "enablePlugin").call(this); |
| }, |
| disablePlugin: function() { |
| $traceurRuntime.superGet(this, $ContextMenuCopyPaste.prototype, "disablePlugin").call(this); |
| }, |
| registerEvents: function() { |
| var $__7 = this; |
| this.eventManager.addEventListener(document, 'mouseenter', (function() { |
| return $__7.removeCurrentClass(); |
| })); |
| this.eventManager.addEventListener(document, 'mouseleave', (function() { |
| return $__7.removeZeroClipboardClass(); |
| })); |
| }, |
| getCopyValue: function() { |
| this.hot.copyPaste.setCopyableText(); |
| return this.hot.copyPaste.copyPasteInstance.elTextarea.value; |
| }, |
| onAfterContextMenuDefaultOptions: function(defaultOptions) { |
| defaultOptions.items.unshift({ |
| key: 'copy', |
| name: 'Copy', |
| disabled: function() { |
| return this.selection.selectedHeader.corner; |
| } |
| }, { |
| key: 'paste', |
| name: 'Paste', |
| callback: function() { |
| this.copyPaste.triggerPaste(); |
| }, |
| disabled: function() { |
| return this.selection.selectedHeader.corner; |
| } |
| }, Handsontable.plugins.ContextMenu.SEPARATOR); |
| }, |
| onAfterContextMenuShow: function() { |
| var $__7 = this; |
| var contextMenu = this.hot.getPlugin('contextMenu'); |
| var data = contextMenu.menu.hotMenu.getSourceData(); |
| arrayEach(data, (function(item, index) { |
| if (item.key === 'copy') { |
| var zeroClipboardInstance = new ZeroClipboard(contextMenu.menu.hotMenu.getCell(index, 0)); |
| zeroClipboardInstance.off(); |
| zeroClipboardInstance.on('copy', (function(event) { |
| var clipboard = event.clipboardData; |
| clipboard.setData('text/plain', $__7.getCopyValue()); |
| $__7.hot.getSettings().outsideClickDeselects = $__7.outsideClickDeselectsCache; |
| })); |
| return false; |
| } |
| })); |
| }, |
| removeCurrentClass: function() { |
| var contextMenu = this.hot.getPlugin('contextMenu'); |
| if (contextMenu.menu.isOpened()) { |
| var element = contextMenu.menu.hotMenu.rootElement.querySelector('td.current'); |
| if (element) { |
| removeClass(element, 'current'); |
| } |
| } |
| this.outsideClickDeselectsCache = this.hot.getSettings().outsideClickDeselects; |
| this.hot.getSettings().outsideClickDeselects = false; |
| }, |
| removeZeroClipboardClass: function() { |
| var contextMenu = this.hot.getPlugin('contextMenu'); |
| if (contextMenu.menu.isOpened()) { |
| var element = contextMenu.menu.hotMenu.rootElement.querySelector('td.zeroclipboard-is-hover'); |
| if (element) { |
| removeClass(element, 'zeroclipboard-is-hover'); |
| } |
| } |
| this.hot.getSettings().outsideClickDeselects = this.outsideClickDeselectsCache; |
| } |
| }, {}, BasePlugin); |
| ; |
| registerPlugin('contextMenuCopyPaste', ContextMenuCopyPaste); |
| |
| //# |
| },{"_base":61,"browser":24,"eventManager":42,"helpers/array":43,"helpers/dom/element":47,"plugins":60,"zeroclipboard":"zeroclipboard"}],88:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| CopyPastePlugin: {get: function() { |
| return CopyPastePlugin; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $__copyPaste__, |
| $__SheetClip__, |
| $___46__46__47__46__46__47_helpers_47_unicode__, |
| $___46__46__47__46__46__47_helpers_47_array__, |
| $___46__46__47__46__46__47_helpers_47_number__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_event__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47_helpers_47_function__, |
| $___46__46__47__46__46__47_plugins__, |
| $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__, |
| $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var copyPaste = ($__copyPaste__ = _dereq_("copyPaste"), $__copyPaste__ && $__copyPaste__.__esModule && $__copyPaste__ || {default: $__copyPaste__}).default; |
| var SheetClip = ($__SheetClip__ = _dereq_("SheetClip"), $__SheetClip__ && $__SheetClip__.__esModule && $__SheetClip__ || {default: $__SheetClip__}).default; |
| var $__3 = ($___46__46__47__46__46__47_helpers_47_unicode__ = _dereq_("helpers/unicode"), $___46__46__47__46__46__47_helpers_47_unicode__ && $___46__46__47__46__46__47_helpers_47_unicode__.__esModule && $___46__46__47__46__46__47_helpers_47_unicode__ || {default: $___46__46__47__46__46__47_helpers_47_unicode__}), |
| KEY_CODES = $__3.KEY_CODES, |
| isCtrlKey = $__3.isCtrlKey; |
| var arrayEach = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}).arrayEach; |
| var rangeEach = ($___46__46__47__46__46__47_helpers_47_number__ = _dereq_("helpers/number"), $___46__46__47__46__46__47_helpers_47_number__ && $___46__46__47__46__46__47_helpers_47_number__.__esModule && $___46__46__47__46__46__47_helpers_47_number__ || {default: $___46__46__47__46__46__47_helpers_47_number__}).rangeEach; |
| var $__6 = ($___46__46__47__46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47__46__46__47_helpers_47_dom_47_event__ && $___46__46__47__46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_event__}), |
| stopImmediatePropagation = $__6.stopImmediatePropagation, |
| isImmediatePropagationStopped = $__6.isImmediatePropagationStopped; |
| var getSelectionText = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}).getSelectionText; |
| var proxy = ($___46__46__47__46__46__47_helpers_47_function__ = _dereq_("helpers/function"), $___46__46__47__46__46__47_helpers_47_function__ && $___46__46__47__46__46__47_helpers_47_function__.__esModule && $___46__46__47__46__46__47_helpers_47_function__ || {default: $___46__46__47__46__46__47_helpers_47_function__}).proxy; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var WalkontableCellCoords = ($___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ = _dereq_("3rdparty/walkontable/src/cell/coords"), $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__.__esModule && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ || {default: $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__}).WalkontableCellCoords; |
| var WalkontableCellRange = ($___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__ = _dereq_("3rdparty/walkontable/src/cell/range"), $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__ && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__.__esModule && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__ || {default: $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__}).WalkontableCellRange; |
| function CopyPastePlugin(instance) { |
| var _this = this; |
| this.copyPasteInstance = copyPaste(); |
| this.copyPasteInstance.onCut(onCut); |
| this.copyPasteInstance.onPaste(onPaste); |
| this.onPaste = onPaste; |
| instance.addHook('beforeKeyDown', onBeforeKeyDown); |
| function onCut() { |
| if (!instance.isListening()) { |
| return; |
| } |
| instance.selection.empty(); |
| } |
| function onPaste(str) { |
| var input, |
| inputArray, |
| selected, |
| coordsFrom, |
| coordsTo, |
| cellRange, |
| topLeftCorner, |
| bottomRightCorner, |
| areaStart, |
| areaEnd; |
| if (!instance.isListening() || !instance.selection.isSelected()) { |
| return; |
| } |
| input = str; |
| inputArray = SheetClip.parse(input); |
| selected = instance.getSelected(); |
| coordsFrom = new WalkontableCellCoords(selected[0], selected[1]); |
| coordsTo = new WalkontableCellCoords(selected[2], selected[3]); |
| cellRange = new WalkontableCellRange(coordsFrom, coordsFrom, coordsTo); |
| topLeftCorner = cellRange.getTopLeftCorner(); |
| bottomRightCorner = cellRange.getBottomRightCorner(); |
| areaStart = topLeftCorner; |
| areaEnd = new WalkontableCellCoords(Math.max(bottomRightCorner.row, inputArray.length - 1 + topLeftCorner.row), Math.max(bottomRightCorner.col, inputArray[0].length - 1 + topLeftCorner.col)); |
| var isSelRowAreaCoverInputValue = coordsTo.row - coordsFrom.row >= inputArray.length - 1; |
| var isSelColAreaCoverInputValue = coordsTo.col - coordsFrom.col >= inputArray[0].length - 1; |
| instance.addHookOnce('afterChange', (function(changes, source) { |
| var changesLength = changes ? changes.length : 0; |
| if (changesLength) { |
| var offset = { |
| row: 0, |
| col: 0 |
| }; |
| var highestColumnIndex = -1; |
| arrayEach(changes, (function(change, index) { |
| var nextChange = changesLength > index + 1 ? changes[index + 1] : null; |
| if (nextChange) { |
| if (!isSelRowAreaCoverInputValue) { |
| offset.row = offset.row + Math.max(nextChange[0] - change[0] - 1, 0); |
| } |
| if (!isSelColAreaCoverInputValue && change[1] > highestColumnIndex) { |
| highestColumnIndex = change[1]; |
| offset.col = offset.col + Math.max(nextChange[1] - change[1] - 1, 0); |
| } |
| } |
| })); |
| instance.selectCell(areaStart.row, areaStart.col, areaEnd.row + offset.row, areaEnd.col + offset.col); |
| } |
| })); |
| instance.populateFromArray(areaStart.row, areaStart.col, inputArray, areaEnd.row, areaEnd.col, 'paste', instance.getSettings().pasteMode); |
| } |
| function onBeforeKeyDown(event) { |
| if (!instance.getSelected()) { |
| return; |
| } |
| if (instance.getActiveEditor() && instance.getActiveEditor().isOpened()) { |
| return; |
| } |
| if (isImmediatePropagationStopped(event)) { |
| return; |
| } |
| if (isCtrlKey(event.keyCode)) { |
| if (instance.getSettings().fragmentSelection && getSelectionText()) { |
| return; |
| } |
| _this.setCopyableText(); |
| stopImmediatePropagation(event); |
| return; |
| } |
| var ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey; |
| if (event.keyCode == KEY_CODES.A && ctrlDown) { |
| instance._registerTimeout(setTimeout(proxy(_this.setCopyableText, _this), 0)); |
| } |
| } |
| this.destroy = function() { |
| if (this.copyPasteInstance) { |
| this.copyPasteInstance.removeCallback(onCut); |
| this.copyPasteInstance.removeCallback(onPaste); |
| this.copyPasteInstance.destroy(); |
| this.copyPasteInstance = null; |
| } |
| instance.removeHook('beforeKeyDown', onBeforeKeyDown); |
| }; |
| instance.addHook('afterDestroy', proxy(this.destroy, this)); |
| this.triggerPaste = proxy(this.copyPasteInstance.triggerPaste, this.copyPasteInstance); |
| this.triggerCut = proxy(this.copyPasteInstance.triggerCut, this.copyPasteInstance); |
| this.setCopyableText = function() { |
| var settings = instance.getSettings(); |
| var copyRowsLimit = settings.copyRowsLimit; |
| var copyColsLimit = settings.copyColsLimit; |
| var selRange = instance.getSelectedRange(); |
| var topLeft = selRange.getTopLeftCorner(); |
| var bottomRight = selRange.getBottomRightCorner(); |
| var startRow = topLeft.row; |
| var startCol = topLeft.col; |
| var endRow = bottomRight.row; |
| var endCol = bottomRight.col; |
| var finalEndRow = Math.min(endRow, startRow + copyRowsLimit - 1); |
| var finalEndCol = Math.min(endCol, startCol + copyColsLimit - 1); |
| var copyableRanges = []; |
| copyableRanges.push({ |
| startRow: startRow, |
| startCol: startCol, |
| endRow: finalEndRow, |
| endCol: finalEndCol |
| }); |
| copyableRanges = Handsontable.hooks.run(instance, 'modifyCopyableRange', copyableRanges); |
| var copyableData = this.getRangedCopyableData(copyableRanges); |
| instance.copyPaste.copyPasteInstance.copyable(copyableData); |
| if (endRow !== finalEndRow || endCol !== finalEndCol) { |
| Handsontable.hooks.run(instance, 'afterCopyLimit', endRow - startRow + 1, endCol - startCol + 1, copyRowsLimit, copyColsLimit); |
| } |
| }; |
| this.getRangedCopyableData = function(ranges) { |
| var dataSet = []; |
| var copyableRows = []; |
| var copyableColumns = []; |
| arrayEach(ranges, (function(range) { |
| rangeEach(range.startRow, range.endRow, (function(row) { |
| if (copyableRows.indexOf(row) === -1) { |
| copyableRows.push(row); |
| } |
| })); |
| rangeEach(range.startCol, range.endCol, (function(column) { |
| if (copyableColumns.indexOf(column) === -1) { |
| copyableColumns.push(column); |
| } |
| })); |
| })); |
| arrayEach(copyableRows, (function(row) { |
| var rowSet = []; |
| arrayEach(copyableColumns, (function(column) { |
| rowSet.push(instance.getCopyableData(row, column)); |
| })); |
| dataSet.push(rowSet); |
| })); |
| return SheetClip.stringify(dataSet); |
| }; |
| } |
| function init() { |
| var instance = this, |
| pluginEnabled = instance.getSettings().copyPaste !== false; |
| if (pluginEnabled && !instance.copyPaste) { |
| instance.copyPaste = new CopyPastePlugin(instance); |
| } else if (!pluginEnabled && instance.copyPaste) { |
| instance.copyPaste.destroy(); |
| instance.copyPaste = null; |
| } |
| } |
| Handsontable.hooks.add('afterInit', init); |
| Handsontable.hooks.add('afterUpdateSettings', init); |
| Handsontable.hooks.register('afterCopyLimit'); |
| Handsontable.hooks.register('modifyCopyableRange'); |
| ; |
| |
| //# |
| },{"3rdparty/walkontable/src/cell/coords":6,"3rdparty/walkontable/src/cell/range":7,"SheetClip":"SheetClip","browser":24,"copyPaste":"copyPaste","helpers/array":43,"helpers/dom/element":47,"helpers/dom/event":48,"helpers/function":50,"helpers/number":52,"helpers/unicode":56,"plugins":60}],89:[function(_dereq_,module,exports){ |
| "use strict"; |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_plugins__, |
| $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__, |
| $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_selection__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var WalkontableCellRange = ($___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__ = _dereq_("3rdparty/walkontable/src/cell/range"), $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__ && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__.__esModule && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__ || {default: $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__}).WalkontableCellRange; |
| var WalkontableSelection = ($___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_selection__ = _dereq_("3rdparty/walkontable/src/selection"), $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_selection__ && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_selection__.__esModule && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_selection__ || {default: $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_selection__}).WalkontableSelection; |
| function CustomBorders() {} |
| var instance; |
| var checkEnable = function(customBorders) { |
| if (typeof customBorders === 'boolean') { |
| if (customBorders === true) { |
| return true; |
| } |
| } |
| if (typeof customBorders === 'object') { |
| if (customBorders.length > 0) { |
| return true; |
| } |
| } |
| return false; |
| }; |
| var init = function() { |
| if (checkEnable(this.getSettings().customBorders)) { |
| if (!this.customBorders) { |
| instance = this; |
| this.customBorders = new CustomBorders(); |
| } |
| } |
| }; |
| var getSettingIndex = function(className) { |
| for (var i = 0; i < instance.view.wt.selections.length; i++) { |
| if (instance.view.wt.selections[i].settings.className == className) { |
| return i; |
| } |
| } |
| return -1; |
| }; |
| var insertBorderIntoSettings = function(border) { |
| var coordinates = { |
| row: border.row, |
| col: border.col |
| }; |
| var selection = new WalkontableSelection(border, new WalkontableCellRange(coordinates, coordinates, coordinates)); |
| var index = getSettingIndex(border.className); |
| if (index >= 0) { |
| instance.view.wt.selections[index] = selection; |
| } else { |
| instance.view.wt.selections.push(selection); |
| } |
| }; |
| var prepareBorderFromCustomAdded = function(row, col, borderObj) { |
| var border = createEmptyBorders(row, col); |
| border = extendDefaultBorder(border, borderObj); |
| this.setCellMeta(row, col, 'borders', border); |
| insertBorderIntoSettings(border); |
| }; |
| var prepareBorderFromCustomAddedRange = function(rowObj) { |
| var range = rowObj.range; |
| for (var row = range.from.row; row <= range.to.row; row++) { |
| for (var col = range.from.col; col <= range.to.col; col++) { |
| var border = createEmptyBorders(row, col); |
| var add = 0; |
| if (row == range.from.row) { |
| add++; |
| if (rowObj.hasOwnProperty('top')) { |
| border.top = rowObj.top; |
| } |
| } |
| if (row == range.to.row) { |
| add++; |
| if (rowObj.hasOwnProperty('bottom')) { |
| border.bottom = rowObj.bottom; |
| } |
| } |
| if (col == range.from.col) { |
| add++; |
| if (rowObj.hasOwnProperty('left')) { |
| border.left = rowObj.left; |
| } |
| } |
| if (col == range.to.col) { |
| add++; |
| if (rowObj.hasOwnProperty('right')) { |
| border.right = rowObj.right; |
| } |
| } |
| if (add > 0) { |
| this.setCellMeta(row, col, 'borders', border); |
| insertBorderIntoSettings(border); |
| } |
| } |
| } |
| }; |
| var createClassName = function(row, col) { |
| return 'border_row' + row + 'col' + col; |
| }; |
| var createDefaultCustomBorder = function() { |
| return { |
| width: 1, |
| color: '#000' |
| }; |
| }; |
| var createSingleEmptyBorder = function() { |
| return {hide: true}; |
| }; |
| var createDefaultHtBorder = function() { |
| return { |
| width: 1, |
| color: '#000', |
| cornerVisible: false |
| }; |
| }; |
| var createEmptyBorders = function(row, col) { |
| return { |
| className: createClassName(row, col), |
| border: createDefaultHtBorder(), |
| row: row, |
| col: col, |
| top: createSingleEmptyBorder(), |
| right: createSingleEmptyBorder(), |
| bottom: createSingleEmptyBorder(), |
| left: createSingleEmptyBorder() |
| }; |
| }; |
| var extendDefaultBorder = function(defaultBorder, customBorder) { |
| if (customBorder.hasOwnProperty('border')) { |
| defaultBorder.border = customBorder.border; |
| } |
| if (customBorder.hasOwnProperty('top')) { |
| defaultBorder.top = customBorder.top; |
| } |
| if (customBorder.hasOwnProperty('right')) { |
| defaultBorder.right = customBorder.right; |
| } |
| if (customBorder.hasOwnProperty('bottom')) { |
| defaultBorder.bottom = customBorder.bottom; |
| } |
| if (customBorder.hasOwnProperty('left')) { |
| defaultBorder.left = customBorder.left; |
| } |
| return defaultBorder; |
| }; |
| var removeBordersFromDom = function(borderClassName) { |
| var borders = document.querySelectorAll('.' + borderClassName); |
| for (var i = 0; i < borders.length; i++) { |
| if (borders[i]) { |
| if (borders[i].nodeName != 'TD') { |
| var parent = borders[i].parentNode; |
| if (parent.parentNode) { |
| parent.parentNode.removeChild(parent); |
| } |
| } |
| } |
| } |
| }; |
| var removeAllBorders = function(row, col) { |
| var borderClassName = createClassName(row, col); |
| removeBordersFromDom(borderClassName); |
| this.removeCellMeta(row, col, 'borders'); |
| }; |
| var setBorder = function(row, col, place, remove) { |
| var bordersMeta = this.getCellMeta(row, col).borders; |
| if (!bordersMeta || bordersMeta.border == undefined) { |
| bordersMeta = createEmptyBorders(row, col); |
| } |
| if (remove) { |
| bordersMeta[place] = createSingleEmptyBorder(); |
| } else { |
| bordersMeta[place] = createDefaultCustomBorder(); |
| } |
| this.setCellMeta(row, col, 'borders', bordersMeta); |
| var borderClassName = createClassName(row, col); |
| removeBordersFromDom(borderClassName); |
| insertBorderIntoSettings(bordersMeta); |
| this.render(); |
| }; |
| var prepareBorder = function(range, place, remove) { |
| if (range.from.row == range.to.row && range.from.col == range.to.col) { |
| if (place == 'noBorders') { |
| removeAllBorders.call(this, range.from.row, range.from.col); |
| } else { |
| setBorder.call(this, range.from.row, range.from.col, place, remove); |
| } |
| } else { |
| switch (place) { |
| case 'noBorders': |
| for (var column = range.from.col; column <= range.to.col; column++) { |
| for (var row = range.from.row; row <= range.to.row; row++) { |
| removeAllBorders.call(this, row, column); |
| } |
| } |
| break; |
| case 'top': |
| for (var topCol = range.from.col; topCol <= range.to.col; topCol++) { |
| setBorder.call(this, range.from.row, topCol, place, remove); |
| } |
| break; |
| case 'right': |
| for (var rowRight = range.from.row; rowRight <= range.to.row; rowRight++) { |
| setBorder.call(this, rowRight, range.to.col, place); |
| } |
| break; |
| case 'bottom': |
| for (var bottomCol = range.from.col; bottomCol <= range.to.col; bottomCol++) { |
| setBorder.call(this, range.to.row, bottomCol, place); |
| } |
| break; |
| case 'left': |
| for (var rowLeft = range.from.row; rowLeft <= range.to.row; rowLeft++) { |
| setBorder.call(this, rowLeft, range.from.col, place); |
| } |
| break; |
| } |
| } |
| }; |
| var checkSelectionBorders = function(hot, direction) { |
| var atLeastOneHasBorder = false; |
| hot.getSelectedRange().forAll(function(r, c) { |
| var metaBorders = hot.getCellMeta(r, c).borders; |
| if (metaBorders) { |
| if (direction) { |
| if (!metaBorders[direction].hasOwnProperty('hide')) { |
| atLeastOneHasBorder = true; |
| return false; |
| } |
| } else { |
| atLeastOneHasBorder = true; |
| return false; |
| } |
| } |
| }); |
| return atLeastOneHasBorder; |
| }; |
| var markSelected = function(label) { |
| return '<span class="selected">' + String.fromCharCode(10003) + '</span>' + label; |
| }; |
| var addBordersOptionsToContextMenu = function(defaultOptions) { |
| if (!this.getSettings().customBorders) { |
| return; |
| } |
| defaultOptions.items.push(Handsontable.plugins.ContextMenu.SEPARATOR); |
| defaultOptions.items.push({ |
| key: 'borders', |
| name: 'Borders', |
| disabled: function() { |
| return this.selection.selectedHeader.corner; |
| }, |
| submenu: {items: [{ |
| key: 'borders:top', |
| name: function() { |
| var label = 'Top'; |
| var hasBorder = checkSelectionBorders(this, 'top'); |
| if (hasBorder) { |
| label = markSelected(label); |
| } |
| return label; |
| }, |
| callback: function() { |
| var hasBorder = checkSelectionBorders(this, 'top'); |
| prepareBorder.call(this, this.getSelectedRange(), 'top', hasBorder); |
| } |
| }, { |
| key: 'borders:right', |
| name: function() { |
| var label = 'Right'; |
| var hasBorder = checkSelectionBorders(this, 'right'); |
| if (hasBorder) { |
| label = markSelected(label); |
| } |
| return label; |
| }, |
| callback: function() { |
| var hasBorder = checkSelectionBorders(this, 'right'); |
| prepareBorder.call(this, this.getSelectedRange(), 'right', hasBorder); |
| } |
| }, { |
| key: 'borders:bottom', |
| name: function() { |
| var label = 'Bottom'; |
| var hasBorder = checkSelectionBorders(this, 'bottom'); |
| if (hasBorder) { |
| label = markSelected(label); |
| } |
| return label; |
| }, |
| callback: function() { |
| var hasBorder = checkSelectionBorders(this, 'bottom'); |
| prepareBorder.call(this, this.getSelectedRange(), 'bottom', hasBorder); |
| } |
| }, { |
| key: 'borders:left', |
| name: function() { |
| var label = 'Left'; |
| var hasBorder = checkSelectionBorders(this, 'left'); |
| if (hasBorder) { |
| label = markSelected(label); |
| } |
| return label; |
| }, |
| callback: function() { |
| var hasBorder = checkSelectionBorders(this, 'left'); |
| prepareBorder.call(this, this.getSelectedRange(), 'left', hasBorder); |
| } |
| }, { |
| key: 'borders:no_borders', |
| name: 'Remove border(s)', |
| callback: function() { |
| prepareBorder.call(this, this.getSelectedRange(), 'noBorders'); |
| }, |
| disabled: function() { |
| return !checkSelectionBorders(this); |
| } |
| }]} |
| }); |
| }; |
| Handsontable.hooks.add('beforeInit', init); |
| Handsontable.hooks.add('afterContextMenuDefaultOptions', addBordersOptionsToContextMenu); |
| Handsontable.hooks.add('afterInit', function() { |
| var customBorders = this.getSettings().customBorders; |
| if (customBorders) { |
| for (var i = 0; i < customBorders.length; i++) { |
| if (customBorders[i].range) { |
| prepareBorderFromCustomAddedRange.call(this, customBorders[i]); |
| } else { |
| prepareBorderFromCustomAdded.call(this, customBorders[i].row, customBorders[i].col, customBorders[i]); |
| } |
| } |
| this.render(); |
| this.view.wt.draw(true); |
| } |
| }); |
| Handsontable.CustomBorders = CustomBorders; |
| |
| //# |
| },{"3rdparty/walkontable/src/cell/range":7,"3rdparty/walkontable/src/selection":19,"browser":24,"plugins":60}],90:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| DragToScroll: {get: function() { |
| return DragToScroll; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_eventManager__, |
| $___46__46__47__46__46__47_plugins__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var eventManagerObject = ($___46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47_eventManager__}).eventManager; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| ; |
| Handsontable.plugins.DragToScroll = DragToScroll; |
| function DragToScroll() { |
| this.boundaries = null; |
| this.callback = null; |
| } |
| DragToScroll.prototype.setBoundaries = function(boundaries) { |
| this.boundaries = boundaries; |
| }; |
| DragToScroll.prototype.setCallback = function(callback) { |
| this.callback = callback; |
| }; |
| DragToScroll.prototype.check = function(x, y) { |
| var diffX = 0; |
| var diffY = 0; |
| if (y < this.boundaries.top) { |
| diffY = y - this.boundaries.top; |
| } else if (y > this.boundaries.bottom) { |
| diffY = y - this.boundaries.bottom; |
| } |
| if (x < this.boundaries.left) { |
| diffX = x - this.boundaries.left; |
| } else if (x > this.boundaries.right) { |
| diffX = x - this.boundaries.right; |
| } |
| this.callback(diffX, diffY); |
| }; |
| var dragToScroll; |
| var instance; |
| var setupListening = function(instance) { |
| instance.dragToScrollListening = false; |
| var scrollHandler = instance.view.wt.wtTable.holder; |
| dragToScroll = new DragToScroll(); |
| if (scrollHandler === window) { |
| return; |
| } else { |
| dragToScroll.setBoundaries(scrollHandler.getBoundingClientRect()); |
| } |
| dragToScroll.setCallback(function(scrollX, scrollY) { |
| if (scrollX < 0) { |
| scrollHandler.scrollLeft -= 50; |
| } else if (scrollX > 0) { |
| scrollHandler.scrollLeft += 50; |
| } |
| if (scrollY < 0) { |
| scrollHandler.scrollTop -= 20; |
| } else if (scrollY > 0) { |
| scrollHandler.scrollTop += 20; |
| } |
| }); |
| instance.dragToScrollListening = true; |
| }; |
| Handsontable.hooks.add('afterInit', function() { |
| var instance = this; |
| var eventManager = eventManagerObject(this); |
| eventManager.addEventListener(document, 'mouseup', function() { |
| instance.dragToScrollListening = false; |
| }); |
| eventManager.addEventListener(document, 'mousemove', function(event) { |
| if (instance.dragToScrollListening) { |
| dragToScroll.check(event.clientX, event.clientY); |
| } |
| }); |
| }); |
| Handsontable.hooks.add('afterDestroy', function() { |
| eventManagerObject(this).clear(); |
| }); |
| Handsontable.hooks.add('afterOnCellMouseDown', function() { |
| setupListening(this); |
| }); |
| Handsontable.hooks.add('afterOnCellCornerMouseDown', function() { |
| setupListening(this); |
| }); |
| Handsontable.plugins.DragToScroll = DragToScroll; |
| |
| //# |
| },{"browser":24,"eventManager":42,"plugins":60}],91:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| ManualColumnFreeze: {get: function() { |
| return ManualColumnFreeze; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__95_base__, |
| $___46__46__47__46__46__47_plugins__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var BasePlugin = ($___46__46__47__95_base__ = _dereq_("_base"), $___46__46__47__95_base__ && $___46__46__47__95_base__.__esModule && $___46__46__47__95_base__ || {default: $___46__46__47__95_base__}).default; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var ManualColumnFreeze = function ManualColumnFreeze(hotInstance) { |
| $traceurRuntime.superConstructor($ManualColumnFreeze).call(this, hotInstance); |
| this.manualColumnMovePlugin = null; |
| this.frozenColumnsBasePositions = []; |
| }; |
| var $ManualColumnFreeze = ManualColumnFreeze; |
| ($traceurRuntime.createClass)(ManualColumnFreeze, { |
| isEnabled: function() { |
| return !!this.hot.getSettings().manualColumnFreeze; |
| }, |
| enablePlugin: function() { |
| var $__3 = this; |
| if (this.enabled) { |
| return; |
| } |
| this.addHook('modifyCol', (function(col) { |
| return $__3.onModifyCol(col); |
| })); |
| this.addHook('afterContextMenuDefaultOptions', (function(defaultOptions) { |
| return $__3.addContextMenuEntry(defaultOptions); |
| })); |
| $traceurRuntime.superGet(this, $ManualColumnFreeze.prototype, "enablePlugin").call(this); |
| }, |
| init: function() { |
| $traceurRuntime.superGet(this, $ManualColumnFreeze.prototype, "init").call(this); |
| this.fixedColumnsCount = this.hot.getSettings().fixedColumnsLeft; |
| }, |
| getManualColumnMovePlugin: function() { |
| if (!this.manualColumnMovePlugin) { |
| this.manualColumnMovePlugin = this.hot.getPlugin('manualColumnMove'); |
| } |
| return this.manualColumnMovePlugin; |
| }, |
| onModifyCol: function(column) { |
| if (this.getManualColumnMovePlugin().isEnabled()) { |
| return column; |
| } |
| return this.getLogicalColumnIndex(column); |
| }, |
| addContextMenuEntry: function(defaultOptions) { |
| var _this = this; |
| defaultOptions.items.push(Handsontable.plugins.ContextMenu.SEPARATOR, { |
| key: 'freeze_column', |
| name: function() { |
| var selectedColumn = _this.hot.getSelected()[1]; |
| if (selectedColumn > _this.fixedColumnsCount - 1) { |
| return 'Freeze this column'; |
| } else { |
| return 'Unfreeze this column'; |
| } |
| }, |
| disabled: function() { |
| var selection = _this.hot.getSelected(); |
| return selection[1] !== selection[3]; |
| }, |
| callback: function() { |
| var selectedColumn = _this.hot.getSelected()[1]; |
| if (selectedColumn > _this.fixedColumnsCount - 1) { |
| _this.freezeColumn(selectedColumn); |
| } else { |
| _this.unfreezeColumn(selectedColumn); |
| } |
| } |
| }); |
| }, |
| freezeColumn: function(column) { |
| if (column <= this.fixedColumnsCount - 1) { |
| return; |
| } |
| if (column !== this.getLogicalColumnIndex(column)) { |
| this.frozenColumnsBasePositions[this.fixedColumnsCount] = column; |
| } |
| this.changeColumnPositions(column, this.fixedColumnsCount); |
| this.addFixedColumn(); |
| this.hot.view.wt.wtOverlays.leftOverlay.refresh(); |
| this.hot.view.wt.wtOverlays.adjustElementsSize(); |
| }, |
| unfreezeColumn: function(column) { |
| if (column > this.fixedColumnsCount - 1) { |
| return; |
| } |
| var returnCol = this.getBestColumnReturnPosition(column); |
| this.changeColumnPositions(column, returnCol); |
| this.removeFixedColumn(); |
| this.hot.view.wt.wtOverlays.leftOverlay.refresh(); |
| this.hot.view.wt.wtOverlays.adjustElementsSize(); |
| }, |
| addFixedColumn: function() { |
| this.hot.updateSettings({fixedColumnsLeft: this.fixedColumnsCount + 1}); |
| this.fixedColumnsCount++; |
| }, |
| removeFixedColumn: function() { |
| this.hot.updateSettings({fixedColumnsLeft: this.fixedColumnsCount - 1}); |
| this.fixedColumnsCount--; |
| }, |
| getBestColumnReturnPosition: function(column) { |
| var i = this.fixedColumnsCount; |
| var j = this.getLogicalColumnIndex(i); |
| var initialCol; |
| if (this.frozenColumnsBasePositions[column] == null) { |
| initialCol = this.getLogicalColumnIndex(column); |
| while (j < initialCol) { |
| i++; |
| j = this.getLogicalColumnIndex(i); |
| } |
| } else { |
| initialCol = this.frozenColumnsBasePositions[column]; |
| this.frozenColumnsBasePositions[column] = void 0; |
| while (j <= initialCol) { |
| i++; |
| j = this.getLogicalColumnIndex(i); |
| } |
| i = j; |
| } |
| return i - 1; |
| }, |
| getVisibleColumnIndex: function(column) { |
| return this.getManualColumnMovePlugin().getVisibleColumnIndex(column); |
| }, |
| getLogicalColumnIndex: function(column) { |
| return this.getManualColumnMovePlugin().getLogicalColumnIndex(column); |
| }, |
| changeColumnPositions: function(sourceColumn, destinationColumn) { |
| this.getManualColumnMovePlugin().changeColumnPositions(sourceColumn, destinationColumn); |
| } |
| }, {}, BasePlugin); |
| ; |
| registerPlugin('manualColumnFreeze', ManualColumnFreeze); |
| |
| //# |
| },{"_base":61,"browser":24,"plugins":60}],92:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| ManualColumnMove: {get: function() { |
| return ManualColumnMove; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__95_base_46_js__, |
| $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47_helpers_47_array__, |
| $___46__46__47__46__46__47_helpers_47_number__, |
| $___46__46__47__46__46__47_eventManager__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_event__, |
| $___46__46__47__46__46__47_plugins__; |
| var BasePlugin = ($___46__46__47__95_base_46_js__ = _dereq_("_base.js"), $___46__46__47__95_base_46_js__ && $___46__46__47__95_base_46_js__.__esModule && $___46__46__47__95_base_46_js__ || {default: $___46__46__47__95_base_46_js__}).default; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var $__2 = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__2.addClass, |
| hasClass = $__2.hasClass, |
| removeClass = $__2.removeClass, |
| outerHeight = $__2.outerHeight; |
| var $__3 = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}), |
| arrayEach = $__3.arrayEach, |
| arrayMap = $__3.arrayMap; |
| var rangeEach = ($___46__46__47__46__46__47_helpers_47_number__ = _dereq_("helpers/number"), $___46__46__47__46__46__47_helpers_47_number__ && $___46__46__47__46__46__47_helpers_47_number__.__esModule && $___46__46__47__46__46__47_helpers_47_number__ || {default: $___46__46__47__46__46__47_helpers_47_number__}).rangeEach; |
| var eventManagerObject = ($___46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47_eventManager__}).eventManager; |
| var pageX = ($___46__46__47__46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47__46__46__47_helpers_47_dom_47_event__ && $___46__46__47__46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_event__}).pageX; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var privatePool = new WeakMap(); |
| var ManualColumnMove = function ManualColumnMove(hotInstance) { |
| var $__8 = this; |
| $traceurRuntime.superConstructor($ManualColumnMove).call(this, hotInstance); |
| privatePool.set(this, { |
| guideClassName: 'manualColumnMoverGuide', |
| handleClassName: 'manualColumnMover', |
| startOffset: null, |
| pressed: null, |
| startCol: null, |
| endCol: null, |
| currentCol: null, |
| startX: null, |
| startY: null |
| }); |
| this.guideElement = null; |
| this.handleElement = null; |
| this.currentTH = null; |
| this.columnPositions = []; |
| this.eventManager = eventManagerObject(this); |
| this.addHook('init', (function() { |
| return $__8.onInit(); |
| })); |
| }; |
| var $ManualColumnMove = ManualColumnMove; |
| ($traceurRuntime.createClass)(ManualColumnMove, { |
| isEnabled: function() { |
| return !!this.hot.getSettings().manualColumnMove; |
| }, |
| enablePlugin: function() { |
| var $__8 = this; |
| var priv = privatePool.get(this); |
| var initialSettings = this.hot.getSettings().manualColumnMove; |
| var loadedManualColumnPositions = this.loadManualColumnPositions(); |
| this.handleElement = document.createElement('DIV'); |
| this.handleElement.className = priv.handleClassName; |
| this.guideElement = document.createElement('DIV'); |
| this.guideElement.className = priv.guideClassName; |
| this.addHook('modifyCol', (function(col) { |
| return $__8.onModifyCol(col); |
| })); |
| this.addHook('unmodifyCol', (function(col) { |
| return $__8.onUnmodifyCol(col); |
| })); |
| this.addHook('afterRemoveCol', (function(index, amount) { |
| return $__8.onAfterRemoveCol(index, amount); |
| })); |
| this.addHook('afterCreateCol', (function(index, amount) { |
| return $__8.onAfterCreateCol(index, amount); |
| })); |
| this.registerEvents(); |
| if (typeof loadedManualColumnPositions != 'undefined') { |
| this.columnPositions = loadedManualColumnPositions; |
| } else if (Array.isArray(initialSettings)) { |
| this.columnPositions = initialSettings; |
| } else if (!initialSettings || this.columnPositions === void 0) { |
| this.columnPositions = []; |
| } |
| $traceurRuntime.superGet(this, $ManualColumnMove.prototype, "enablePlugin").call(this); |
| }, |
| updatePlugin: function() { |
| this.disablePlugin(); |
| this.enablePlugin(); |
| $traceurRuntime.superGet(this, $ManualColumnMove.prototype, "updatePlugin").call(this); |
| }, |
| disablePlugin: function() { |
| var pluginSetting = this.hot.getSettings().manualColumnMove; |
| if (Array.isArray(pluginSetting)) { |
| this.unregisterEvents(); |
| this.columnPositions = []; |
| } |
| $traceurRuntime.superGet(this, $ManualColumnMove.prototype, "disablePlugin").call(this); |
| }, |
| registerEvents: function() { |
| var $__8 = this; |
| this.eventManager.addEventListener(this.hot.rootElement, 'mouseover', (function(event) { |
| return $__8.onMouseOver(event); |
| })); |
| this.eventManager.addEventListener(this.hot.rootElement, 'mousedown', (function(event) { |
| return $__8.onMouseDown(event); |
| })); |
| this.eventManager.addEventListener(window, 'mousemove', (function(event) { |
| return $__8.onMouseMove(event); |
| })); |
| this.eventManager.addEventListener(window, 'mouseup', (function(event) { |
| return $__8.onMouseUp(event); |
| })); |
| }, |
| unregisterEvents: function() { |
| this.eventManager.clear(); |
| }, |
| saveManualColumnPositions: function() { |
| Handsontable.hooks.run(this.hot, 'persistentStateSave', 'manualColumnPositions', this.columnPositions); |
| }, |
| loadManualColumnPositions: function() { |
| var storedState = {}; |
| Handsontable.hooks.run(this.hot, 'persistentStateLoad', 'manualColumnPositions', storedState); |
| return storedState.value; |
| }, |
| completeSettingsArray: function() { |
| var $__8 = this; |
| var columnCount = this.hot.countCols(); |
| if (this.columnPositions.length === columnCount) { |
| return; |
| } |
| rangeEach(0, columnCount - 1, (function(i) { |
| if ($__8.columnPositions.indexOf(i) === -1) { |
| $__8.columnPositions.push(i); |
| } |
| })); |
| }, |
| setupHandlePosition: function(TH) { |
| this.currentTH = TH; |
| var priv = privatePool.get(this); |
| var col = this.hot.view.wt.wtTable.getCoords(TH).col; |
| var headerHeight = outerHeight(this.currentTH); |
| if (col >= 0) { |
| var box = this.currentTH.getBoundingClientRect(); |
| priv.currentCol = col; |
| priv.startOffset = box.left; |
| this.handleElement.style.top = box.top + 'px'; |
| this.handleElement.style.left = priv.startOffset + 'px'; |
| this.handleElement.style.height = headerHeight + 'px'; |
| this.hot.rootElement.appendChild(this.handleElement); |
| } |
| }, |
| refreshHandlePosition: function(TH, delta) { |
| var box = TH.getBoundingClientRect(); |
| var handleWidth = 6; |
| if (delta > 0) { |
| this.handleElement.style.left = (box.left + box.width - handleWidth) + 'px'; |
| } else { |
| this.handleElement.style.left = box.left + 'px'; |
| } |
| }, |
| setupGuidePosition: function() { |
| var box = this.currentTH.getBoundingClientRect(); |
| var priv = privatePool.get(this); |
| var handleHeight = parseInt(outerHeight(this.handleElement), 10); |
| var handleBottomPosition = parseInt(this.handleElement.style.top, 10) + handleHeight; |
| var maximumVisibleElementHeight = parseInt(this.hot.view.maximumVisibleElementHeight(0), 10); |
| addClass(this.handleElement, 'active'); |
| addClass(this.guideElement, 'active'); |
| this.guideElement.style.width = box.width + 'px'; |
| this.guideElement.style.height = (maximumVisibleElementHeight - handleHeight) + 'px'; |
| this.guideElement.style.top = handleBottomPosition + 'px'; |
| this.guideElement.style.left = priv.startOffset + 'px'; |
| this.hot.rootElement.appendChild(this.guideElement); |
| }, |
| refreshGuidePosition: function(diff) { |
| var priv = privatePool.get(this); |
| this.guideElement.style.left = priv.startOffset + diff + 'px'; |
| }, |
| hideHandleAndGuide: function() { |
| removeClass(this.handleElement, 'active'); |
| removeClass(this.guideElement, 'active'); |
| }, |
| checkColumnHeader: function(element) { |
| if (element != this.hot.rootElement) { |
| var parent = element.parentNode; |
| if (parent.tagName === 'THEAD') { |
| return true; |
| } |
| return this.checkColumnHeader(parent); |
| } |
| return false; |
| }, |
| createPositionData: function(len) { |
| var positionArr = this.columnPositions; |
| if (positionArr.length < len) { |
| rangeEach(positionArr.length, len - 1, (function(i) { |
| positionArr[i] = i; |
| })); |
| } |
| }, |
| getTHFromTargetElement: function(element) { |
| if (element.tagName != 'TABLE') { |
| if (element.tagName == 'TH') { |
| return element; |
| } else { |
| return this.getTHFromTargetElement(element.parentNode); |
| } |
| } |
| return null; |
| }, |
| changeColumnPositions: function(columnIndex, destinationIndex) { |
| var maxLength = Math.max(columnIndex, destinationIndex); |
| if (maxLength > this.columnPositions.length - 1) { |
| this.createPositionData(maxLength + 1); |
| } |
| this.columnPositions.splice(destinationIndex, 0, this.columnPositions.splice(columnIndex, 1)[0]); |
| }, |
| getVisibleColumnIndex: function(column) { |
| var position = this.columnPositions.indexOf(column); |
| return position === -1 ? void 0 : position; |
| }, |
| getLogicalColumnIndex: function(column) { |
| return this.columnPositions[column]; |
| }, |
| onMouseOver: function(event) { |
| var priv = privatePool.get(this); |
| if (this.checkColumnHeader(event.target)) { |
| var th = this.getTHFromTargetElement(event.target); |
| if (th) { |
| if (priv.pressed) { |
| var col = this.hot.view.wt.wtTable.getCoords(th).col; |
| if (col >= 0) { |
| priv.endCol = col; |
| this.refreshHandlePosition(th, priv.endCol - priv.startCol); |
| } |
| } else { |
| this.setupHandlePosition(th); |
| } |
| } |
| } |
| }, |
| onMouseDown: function(event) { |
| var priv = privatePool.get(this); |
| if (hasClass(event.target, priv.handleClassName)) { |
| priv.startX = pageX(event); |
| this.setupGuidePosition(); |
| priv.pressed = this.hot; |
| priv.startCol = priv.currentCol; |
| priv.endCol = priv.currentCol; |
| } |
| }, |
| onMouseMove: function(event) { |
| var priv = privatePool.get(this); |
| if (priv.pressed) { |
| this.refreshGuidePosition(pageX(event) - priv.startX); |
| } |
| }, |
| onMouseUp: function(event) { |
| var priv = privatePool.get(this); |
| if (priv.pressed) { |
| this.hideHandleAndGuide(); |
| priv.pressed = false; |
| this.createPositionData(this.hot.countCols()); |
| this.changeColumnPositions(priv.startCol, priv.endCol); |
| Handsontable.hooks.run(this.hot, 'beforeColumnMove', priv.startCol, priv.endCol); |
| this.hot.forceFullRender = true; |
| this.hot.view.render(); |
| this.saveManualColumnPositions(); |
| Handsontable.hooks.run(this.hot, 'afterColumnMove', priv.startCol, priv.endCol); |
| this.setupHandlePosition(this.currentTH); |
| } |
| }, |
| onModifyCol: function(col) { |
| return this.getLogicalColumnIndex(col); |
| }, |
| onUnmodifyCol: function(col) { |
| return this.getVisibleColumnIndex(col); |
| }, |
| onAfterRemoveCol: function(index, amount) { |
| if (!this.isEnabled()) { |
| return; |
| } |
| var rmindx; |
| var colpos = this.columnPositions; |
| rmindx = colpos.splice(index, amount); |
| colpos = arrayMap(colpos, function(value, index) { |
| var i, |
| newpos = value; |
| arrayEach(rmindx, (function(elem, index) { |
| if (value > elem) { |
| newpos--; |
| } |
| })); |
| return newpos; |
| }); |
| this.columnPositions = colpos; |
| }, |
| onAfterCreateCol: function(index, amount) { |
| if (!this.isEnabled()) { |
| return; |
| } |
| var colpos = this.columnPositions; |
| if (!colpos.length) { |
| return; |
| } |
| var addindx = []; |
| rangeEach(0, amount - 1, (function(i) { |
| addindx.push(index + i); |
| })); |
| if (index >= colpos.length) { |
| colpos = colpos.concat(addindx); |
| } else { |
| colpos = arrayMap(colpos, function(value, ind) { |
| return (value >= index) ? (value + amount) : value; |
| }); |
| colpos.splice.apply(colpos, [index, 0].concat(addindx)); |
| } |
| this.columnPositions = colpos; |
| }, |
| onInit: function() { |
| this.completeSettingsArray(); |
| } |
| }, {}, BasePlugin); |
| ; |
| registerPlugin('manualColumnMove', ManualColumnMove); |
| Handsontable.hooks.register('beforeColumnMove'); |
| Handsontable.hooks.register('afterColumnMove'); |
| Handsontable.hooks.register('unmodifyCol'); |
| |
| //# |
| },{"_base.js":61,"browser":24,"eventManager":42,"helpers/array":43,"helpers/dom/element":47,"helpers/dom/event":48,"helpers/number":52,"plugins":60}],93:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| ManualColumnResize: {get: function() { |
| return ManualColumnResize; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__95_base_46_js__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47_eventManager__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_event__, |
| $___46__46__47__46__46__47_helpers_47_array__, |
| $___46__46__47__46__46__47_helpers_47_number__, |
| $___46__46__47__46__46__47_plugins__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var BasePlugin = ($___46__46__47__95_base_46_js__ = _dereq_("_base.js"), $___46__46__47__95_base_46_js__ && $___46__46__47__95_base_46_js__.__esModule && $___46__46__47__95_base_46_js__ || {default: $___46__46__47__95_base_46_js__}).default; |
| var $__2 = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__2.addClass, |
| hasClass = $__2.hasClass, |
| removeClass = $__2.removeClass, |
| outerHeight = $__2.outerHeight; |
| var eventManagerObject = ($___46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47_eventManager__}).eventManager; |
| var $__4 = ($___46__46__47__46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47__46__46__47_helpers_47_dom_47_event__ && $___46__46__47__46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_event__}), |
| pageX = $__4.pageX, |
| pageY = $__4.pageY; |
| var arrayEach = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}).arrayEach; |
| var rangeEach = ($___46__46__47__46__46__47_helpers_47_number__ = _dereq_("helpers/number"), $___46__46__47__46__46__47_helpers_47_number__ && $___46__46__47__46__46__47_helpers_47_number__.__esModule && $___46__46__47__46__46__47_helpers_47_number__ || {default: $___46__46__47__46__46__47_helpers_47_number__}).rangeEach; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var ManualColumnResize = function ManualColumnResize(hotInstance) { |
| $traceurRuntime.superConstructor($ManualColumnResize).call(this, hotInstance); |
| this.currentTH = null; |
| this.currentCol = null; |
| this.selectedCols = []; |
| this.currentWidth = null; |
| this.newSize = null; |
| this.startY = null; |
| this.startWidth = null; |
| this.startOffset = null; |
| this.handle = document.createElement('DIV'); |
| this.guide = document.createElement('DIV'); |
| this.eventManager = eventManagerObject(this); |
| this.pressed = null; |
| this.dblclick = 0; |
| this.autoresizeTimeout = null; |
| this.manualColumnWidths = []; |
| addClass(this.handle, 'manualColumnResizer'); |
| addClass(this.guide, 'manualColumnResizerGuide'); |
| }; |
| var $ManualColumnResize = ManualColumnResize; |
| ($traceurRuntime.createClass)(ManualColumnResize, { |
| isEnabled: function() { |
| return this.hot.getSettings().manualColumnResize; |
| }, |
| enablePlugin: function() { |
| var $__8 = this; |
| if (this.enabled) { |
| return; |
| } |
| this.manualColumnWidths = []; |
| var initialColumnWidth = this.hot.getSettings().manualColumnResize; |
| var loadedManualColumnWidths = this.loadManualColumnWidths(); |
| this.addHook('modifyColWidth', (function(width, col) { |
| return $__8.onModifyColWidth(width, col); |
| })); |
| this.addHook('beforeStretchingColumnWidth', (function(stretchedWidth, column) { |
| return $__8.onBeforeStretchingColumnWidth(stretchedWidth, column); |
| })); |
| this.addHook('beforeColumnResize', (function(currentColumn, newSize, isDoubleClick) { |
| return $__8.onBeforeColumnResize(currentColumn, newSize, isDoubleClick); |
| })); |
| if (typeof loadedManualColumnWidths != 'undefined') { |
| this.manualColumnWidths = loadedManualColumnWidths; |
| } else if (Array.isArray(initialColumnWidth)) { |
| this.manualColumnWidths = initialColumnWidth; |
| } else { |
| this.manualColumnWidths = []; |
| } |
| Handsontable.hooks.register('beforeColumnResize'); |
| Handsontable.hooks.register('afterColumnResize'); |
| this.bindEvents(); |
| $traceurRuntime.superGet(this, $ManualColumnResize.prototype, "enablePlugin").call(this); |
| }, |
| updatePlugin: function() { |
| var initialColumnWidth = this.hot.getSettings().manualColumnResize; |
| if (Array.isArray(initialColumnWidth)) { |
| this.manualColumnWidths = initialColumnWidth; |
| } else if (!initialColumnWidth) { |
| this.manualColumnWidths = []; |
| } |
| }, |
| disablePlugin: function() { |
| $traceurRuntime.superGet(this, $ManualColumnResize.prototype, "disablePlugin").call(this); |
| }, |
| saveManualColumnWidths: function() { |
| this.hot.runHooks('persistentStateSave', 'manualColumnWidths', this.manualColumnWidths); |
| }, |
| loadManualColumnWidths: function() { |
| var storedState = {}; |
| this.hot.runHooks('persistentStateLoad', 'manualColumnWidths', storedState); |
| return storedState.value; |
| }, |
| setupHandlePosition: function(TH) { |
| var $__8 = this; |
| if (!TH.parentNode) { |
| return false; |
| } |
| this.currentTH = TH; |
| var col = this.hot.view.wt.wtTable.getCoords(TH).col; |
| var headerHeight = outerHeight(this.currentTH); |
| if (col >= 0) { |
| var box = this.currentTH.getBoundingClientRect(); |
| this.currentCol = col; |
| this.selectedCols = []; |
| if (this.hot.selection.isSelected() && this.hot.selection.selectedHeader.cols) { |
| var $__10 = this.hot.getSelectedRange(), |
| from = $__10.from, |
| to = $__10.to; |
| var start = from.col; |
| var end = to.col; |
| if (start >= end) { |
| start = to.col; |
| end = from.col; |
| } |
| if (this.currentCol >= start && this.currentCol <= end) { |
| rangeEach(start, end, (function(i) { |
| return $__8.selectedCols.push(i); |
| })); |
| } else { |
| this.selectedCols.push(this.currentCol); |
| } |
| } else { |
| this.selectedCols.push(this.currentCol); |
| } |
| this.startOffset = box.left - 6; |
| this.startWidth = parseInt(box.width, 10); |
| this.handle.style.top = box.top + 'px'; |
| this.handle.style.left = this.startOffset + this.startWidth + 'px'; |
| this.handle.style.height = headerHeight + 'px'; |
| this.hot.rootElement.appendChild(this.handle); |
| } |
| }, |
| refreshHandlePosition: function() { |
| this.handle.style.left = this.startOffset + this.currentWidth + 'px'; |
| }, |
| setupGuidePosition: function() { |
| var handleHeight = parseInt(outerHeight(this.handle), 10); |
| var handleBottomPosition = parseInt(this.handle.style.top, 10) + handleHeight; |
| var maximumVisibleElementHeight = parseInt(this.hot.view.maximumVisibleElementHeight(0), 10); |
| addClass(this.handle, 'active'); |
| addClass(this.guide, 'active'); |
| this.guide.style.top = handleBottomPosition + 'px'; |
| this.guide.style.left = this.handle.style.left; |
| this.guide.style.height = (maximumVisibleElementHeight - handleHeight) + 'px'; |
| this.hot.rootElement.appendChild(this.guide); |
| }, |
| refreshGuidePosition: function() { |
| this.guide.style.left = this.handle.style.left; |
| }, |
| hideHandleAndGuide: function() { |
| removeClass(this.handle, 'active'); |
| removeClass(this.guide, 'active'); |
| }, |
| checkIfColumnHeader: function(element) { |
| if (element != this.hot.rootElement) { |
| var parent = element.parentNode; |
| if (parent.tagName === 'THEAD') { |
| return true; |
| } |
| return this.checkIfColumnHeader(parent); |
| } |
| return false; |
| }, |
| getTHFromTargetElement: function(element) { |
| if (element.tagName != 'TABLE') { |
| if (element.tagName == 'TH') { |
| return element; |
| } else { |
| return this.getTHFromTargetElement(element.parentNode); |
| } |
| } |
| return null; |
| }, |
| onMouseOver: function(event) { |
| if (this.checkIfColumnHeader(event.target)) { |
| var th = this.getTHFromTargetElement(event.target); |
| if (!th) { |
| return; |
| } |
| var colspan = th.getAttribute('colspan'); |
| if (th && (colspan === null || colspan === 1)) { |
| if (!this.pressed) { |
| this.setupHandlePosition(th); |
| } |
| } |
| } |
| }, |
| afterMouseDownTimeout: function() { |
| var $__8 = this; |
| var render = (function() { |
| $__8.hot.forceFullRender = true; |
| $__8.hot.view.render(); |
| $__8.hot.view.wt.wtOverlays.adjustElementsSize(true); |
| }); |
| var resize = (function(selectedCol, forceRender) { |
| var hookNewSize = $__8.hot.runHooks('beforeColumnResize', selectedCol, $__8.newSize, true); |
| if (hookNewSize !== void 0) { |
| $__8.newSize = hookNewSize; |
| } |
| if ($__8.hot.getSettings().stretchH === 'all') { |
| $__8.clearManualSize(selectedCol); |
| } else { |
| $__8.setManualSize(selectedCol, $__8.newSize); |
| } |
| if (forceRender) { |
| render(); |
| } |
| $__8.saveManualColumnWidths(); |
| $__8.hot.runHooks('afterColumnResize', selectedCol, $__8.newSize, true); |
| }); |
| if (this.dblclick >= 2) { |
| var selectedColsLength = this.selectedCols.length; |
| if (selectedColsLength > 1) { |
| arrayEach(this.selectedCols, (function(selectedCol) { |
| resize(selectedCol); |
| })); |
| render(); |
| } else { |
| arrayEach(this.selectedCols, (function(selectedCol) { |
| resize(selectedCol, true); |
| })); |
| } |
| } |
| this.dblclick = 0; |
| this.autoresizeTimeout = null; |
| }, |
| onMouseDown: function(event) { |
| var $__8 = this; |
| if (hasClass(event.target, 'manualColumnResizer')) { |
| this.setupGuidePosition(); |
| this.pressed = this.hot; |
| if (this.autoresizeTimeout === null) { |
| this.autoresizeTimeout = setTimeout((function() { |
| return $__8.afterMouseDownTimeout(); |
| }), 500); |
| this.hot._registerTimeout(this.autoresizeTimeout); |
| } |
| this.dblclick++; |
| this.startX = pageX(event); |
| this.newSize = this.startWidth; |
| } |
| }, |
| onMouseMove: function(event) { |
| var $__8 = this; |
| if (this.pressed) { |
| this.currentWidth = this.startWidth + (pageX(event) - this.startX); |
| arrayEach(this.selectedCols, (function(selectedCol) { |
| $__8.newSize = $__8.setManualSize(selectedCol, $__8.currentWidth); |
| })); |
| this.refreshHandlePosition(); |
| this.refreshGuidePosition(); |
| } |
| }, |
| onMouseUp: function(event) { |
| var $__8 = this; |
| var render = (function() { |
| $__8.hot.forceFullRender = true; |
| $__8.hot.view.render(); |
| $__8.hot.view.wt.wtOverlays.adjustElementsSize(true); |
| }); |
| var resize = (function(selectedCol, forceRender) { |
| $__8.hot.runHooks('beforeColumnResize', selectedCol, $__8.newSize); |
| if (forceRender) { |
| render(); |
| } |
| $__8.saveManualColumnWidths(); |
| $__8.hot.runHooks('afterColumnResize', selectedCol, $__8.newSize); |
| }); |
| if (this.pressed) { |
| this.hideHandleAndGuide(); |
| this.pressed = false; |
| if (this.newSize != this.startWidth) { |
| var selectedColsLength = this.selectedCols.length; |
| if (selectedColsLength > 1) { |
| arrayEach(this.selectedCols, (function(selectedCol) { |
| resize(selectedCol); |
| })); |
| render(); |
| } else { |
| arrayEach(this.selectedCols, (function(selectedCol) { |
| resize(selectedCol, true); |
| })); |
| } |
| } |
| this.setupHandlePosition(this.currentTH); |
| } |
| }, |
| bindEvents: function() { |
| var $__8 = this; |
| this.eventManager.addEventListener(this.hot.rootElement, 'mouseover', (function(e) { |
| return $__8.onMouseOver(e); |
| })); |
| this.eventManager.addEventListener(this.hot.rootElement, 'mousedown', (function(e) { |
| return $__8.onMouseDown(e); |
| })); |
| this.eventManager.addEventListener(window, 'mousemove', (function(e) { |
| return $__8.onMouseMove(e); |
| })); |
| this.eventManager.addEventListener(window, 'mouseup', (function(e) { |
| return $__8.onMouseUp(e); |
| })); |
| }, |
| setManualSize: function(column, width) { |
| width = Math.max(width, 20); |
| column = this.hot.runHooks('modifyCol', column); |
| this.manualColumnWidths[column] = width; |
| return width; |
| }, |
| clearManualSize: function(column) { |
| column = this.hot.runHooks('modifyCol', column); |
| this.manualColumnWidths[column] = void 0; |
| }, |
| onModifyColWidth: function(width, column) { |
| if (this.enabled) { |
| column = this.hot.runHooks('modifyCol', column); |
| if (this.hot.getSettings().manualColumnResize && this.manualColumnWidths[column]) { |
| return this.manualColumnWidths[column]; |
| } |
| } |
| return width; |
| }, |
| onBeforeStretchingColumnWidth: function(stretchedWidth, column) { |
| var width = this.manualColumnWidths[column]; |
| if (width === void 0) { |
| width = stretchedWidth; |
| } |
| return width; |
| }, |
| onBeforeColumnResize: function() { |
| this.hot.view.wt.wtViewport.hasOversizedColumnHeadersMarked = {}; |
| } |
| }, {}, BasePlugin); |
| ; |
| registerPlugin('manualColumnResize', ManualColumnResize); |
| |
| //# |
| },{"_base.js":61,"browser":24,"eventManager":42,"helpers/array":43,"helpers/dom/element":47,"helpers/dom/event":48,"helpers/number":52,"plugins":60}],94:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| ManualRowMove: {get: function() { |
| return ManualRowMove; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__95_base_46_js__, |
| $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47_helpers_47_array__, |
| $___46__46__47__46__46__47_helpers_47_number__, |
| $___46__46__47__46__46__47_eventManager__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_event__, |
| $___46__46__47__46__46__47_plugins__; |
| var BasePlugin = ($___46__46__47__95_base_46_js__ = _dereq_("_base.js"), $___46__46__47__95_base_46_js__ && $___46__46__47__95_base_46_js__.__esModule && $___46__46__47__95_base_46_js__ || {default: $___46__46__47__95_base_46_js__}).default; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var $__2 = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__2.addClass, |
| hasClass = $__2.hasClass, |
| removeClass = $__2.removeClass, |
| outerWidth = $__2.outerWidth; |
| var $__3 = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}), |
| arrayEach = $__3.arrayEach, |
| arrayMap = $__3.arrayMap; |
| var rangeEach = ($___46__46__47__46__46__47_helpers_47_number__ = _dereq_("helpers/number"), $___46__46__47__46__46__47_helpers_47_number__ && $___46__46__47__46__46__47_helpers_47_number__.__esModule && $___46__46__47__46__46__47_helpers_47_number__ || {default: $___46__46__47__46__46__47_helpers_47_number__}).rangeEach; |
| var eventManagerObject = ($___46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47_eventManager__}).eventManager; |
| var pageY = ($___46__46__47__46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47__46__46__47_helpers_47_dom_47_event__ && $___46__46__47__46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_event__}).pageY; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var privatePool = new WeakMap(); |
| var ManualRowMove = function ManualRowMove(hotInstance) { |
| $traceurRuntime.superConstructor($ManualRowMove).call(this, hotInstance); |
| privatePool.set(this, { |
| guideClassName: 'manualRowMoverGuide', |
| handleClassName: 'manualRowMover', |
| startOffset: null, |
| pressed: null, |
| startRow: null, |
| endRow: null, |
| currentRow: null, |
| startX: null, |
| startY: null |
| }); |
| this.guideElement = null; |
| this.handleElement = null; |
| this.currentTH = null; |
| this.rowPositions = []; |
| this.eventManager = eventManagerObject(this); |
| }; |
| var $ManualRowMove = ManualRowMove; |
| ($traceurRuntime.createClass)(ManualRowMove, { |
| isEnabled: function() { |
| return !!this.hot.getSettings().manualRowMove; |
| }, |
| enablePlugin: function() { |
| var $__8 = this; |
| var priv = privatePool.get(this); |
| var initialSettings = this.hot.getSettings().manualRowMove; |
| var loadedManualRowPositions = this.loadManualRowPositions(); |
| this.handleElement = document.createElement('DIV'); |
| this.handleElement.className = priv.handleClassName; |
| this.guideElement = document.createElement('DIV'); |
| this.guideElement.className = priv.guideClassName; |
| this.addHook('modifyRow', (function(row) { |
| return $__8.onModifyRow(row); |
| })); |
| this.addHook('afterRemoveRow', (function(index, amount) { |
| return $__8.onAfterRemoveRow(index, amount); |
| })); |
| this.addHook('afterCreateRow', (function(index, amount) { |
| return $__8.onAfterCreateRow(index, amount); |
| })); |
| this.addHook('init', (function() { |
| return $__8.onInit(); |
| })); |
| this.registerEvents(); |
| if (typeof loadedManualRowPositions != 'undefined') { |
| this.rowPositions = loadedManualRowPositions; |
| } else if (Array.isArray(initialSettings)) { |
| this.rowPositions = initialSettings; |
| } else if (!initialSettings || this.rowPositions === void 0) { |
| this.rowPositions = []; |
| } |
| $traceurRuntime.superGet(this, $ManualRowMove.prototype, "enablePlugin").call(this); |
| }, |
| updatePlugin: function() { |
| this.disablePlugin(); |
| this.enablePlugin(); |
| $traceurRuntime.superGet(this, $ManualRowMove.prototype, "updatePlugin").call(this); |
| }, |
| disablePlugin: function() { |
| var pluginSetting = this.hot.getSettings().manualRowMove; |
| if (Array.isArray(pluginSetting)) { |
| this.unregisterEvents(); |
| this.rowPositions = []; |
| } |
| $traceurRuntime.superGet(this, $ManualRowMove.prototype, "disablePlugin").call(this); |
| }, |
| registerEvents: function() { |
| var $__8 = this; |
| this.eventManager.addEventListener(this.hot.rootElement, 'mouseover', (function(event) { |
| return $__8.onMouseOver(event); |
| })); |
| this.eventManager.addEventListener(this.hot.rootElement, 'mousedown', (function(event) { |
| return $__8.onMouseDown(event); |
| })); |
| this.eventManager.addEventListener(window, 'mousemove', (function(event) { |
| return $__8.onMouseMove(event); |
| })); |
| this.eventManager.addEventListener(window, 'mouseup', (function(event) { |
| return $__8.onMouseUp(event); |
| })); |
| }, |
| unregisterEvents: function() { |
| this.eventManager.clear(); |
| }, |
| saveManualRowPositions: function() { |
| Handsontable.hooks.run(this.hot, 'persistentStateSave', 'manualRowPositions', this.rowPositions); |
| }, |
| loadManualRowPositions: function() { |
| var storedState = {}; |
| Handsontable.hooks.run(this.hot, 'persistentStateLoad', 'manualRowPositions', storedState); |
| return storedState.value; |
| }, |
| completeSettingsArray: function() { |
| var $__8 = this; |
| var rowCount = this.hot.countRows(); |
| if (this.rowPositions.length === rowCount) { |
| return; |
| } |
| rangeEach(0, rowCount - 1, (function(i) { |
| if ($__8.rowPositions.indexOf(i) === -1) { |
| $__8.rowPositions.push(i); |
| } |
| })); |
| }, |
| setupHandlePosition: function(TH) { |
| this.currentTH = TH; |
| var priv = privatePool.get(this); |
| var row = this.hot.view.wt.wtTable.getCoords(TH).row; |
| var headerWidth = outerWidth(this.currentTH); |
| if (row >= 0) { |
| var box = this.currentTH.getBoundingClientRect(); |
| priv.currentRow = row; |
| priv.startOffset = box.top; |
| this.handleElement.style.top = priv.startOffset + 'px'; |
| this.handleElement.style.left = box.left + 'px'; |
| this.handleElement.style.width = headerWidth + 'px'; |
| this.hot.rootElement.appendChild(this.handleElement); |
| } |
| }, |
| refreshHandlePosition: function(TH, delta) { |
| var box = TH.getBoundingClientRect(); |
| var handleHeight = 6; |
| if (delta > 0) { |
| this.handleElement.style.top = (box.top + box.height - handleHeight) + 'px'; |
| } else { |
| this.handleElement.style.top = box.top + 'px'; |
| } |
| }, |
| setupGuidePosition: function() { |
| var box = this.currentTH.getBoundingClientRect(); |
| var priv = privatePool.get(this); |
| var handleWidth = parseInt(outerWidth(this.handleElement), 10); |
| var handleRightPosition = parseInt(this.handleElement.style.left, 10) + handleWidth; |
| var maximumVisibleElementWidth = parseInt(this.hot.view.maximumVisibleElementWidth(0), 10); |
| addClass(this.handleElement, 'active'); |
| addClass(this.guideElement, 'active'); |
| this.guideElement.style.height = box.height + 'px'; |
| this.guideElement.style.width = (maximumVisibleElementWidth - handleWidth) + 'px'; |
| this.guideElement.style.top = priv.startOffset + 'px'; |
| this.guideElement.style.left = handleRightPosition + 'px'; |
| this.hot.rootElement.appendChild(this.guideElement); |
| }, |
| refreshGuidePosition: function(diff) { |
| var priv = privatePool.get(this); |
| this.guideElement.style.top = priv.startOffset + diff + 'px'; |
| }, |
| hideHandleAndGuide: function() { |
| removeClass(this.handleElement, 'active'); |
| removeClass(this.guideElement, 'active'); |
| }, |
| checkRowHeader: function(element) { |
| if (element != this.hot.rootElement) { |
| var parent = element.parentNode; |
| if (parent.tagName === 'TBODY') { |
| return true; |
| } |
| return this.checkRowHeader(parent); |
| } |
| return false; |
| }, |
| createPositionData: function(len) { |
| var positionArr = this.rowPositions; |
| if (positionArr.length < len) { |
| rangeEach(positionArr.length, len - 1, (function(i) { |
| positionArr[i] = i; |
| })); |
| } |
| }, |
| getTHFromTargetElement: function(element) { |
| if (element.tagName != 'TABLE') { |
| if (element.tagName == 'TH') { |
| return element; |
| } else { |
| return this.getTHFromTargetElement(element.parentNode); |
| } |
| } |
| return null; |
| }, |
| changeRowPositions: function(rowIndex, destinationIndex) { |
| var maxLength = Math.max(rowIndex, destinationIndex); |
| if (maxLength > this.rowPositions.length - 1) { |
| this.createPositionData(maxLength + 1); |
| } |
| this.rowPositions.splice(destinationIndex, 0, this.rowPositions.splice(rowIndex, 1)[0]); |
| }, |
| getVisibleRowIndex: function(row) { |
| var position = this.rowPositions.indexOf(row); |
| return position === -1 ? void 0 : position; |
| }, |
| getLogicalRowIndex: function(row) { |
| return this.rowPositions[row]; |
| }, |
| onMouseOver: function(event) { |
| var priv = privatePool.get(this); |
| if (this.checkRowHeader(event.target)) { |
| var th = this.getTHFromTargetElement(event.target); |
| if (th) { |
| if (priv.pressed) { |
| priv.endRow = this.hot.view.wt.wtTable.getCoords(th).row; |
| this.refreshHandlePosition(th, priv.endRow - priv.startRow); |
| } else { |
| this.setupHandlePosition(th); |
| } |
| } |
| } |
| }, |
| onMouseDown: function(event) { |
| var priv = privatePool.get(this); |
| if (hasClass(event.target, priv.handleClassName)) { |
| priv.startY = pageY(event); |
| this.setupGuidePosition(); |
| priv.pressed = this.hot; |
| priv.startRow = priv.currentRow; |
| priv.endRow = priv.currentRow; |
| } |
| }, |
| onMouseMove: function(event) { |
| var priv = privatePool.get(this); |
| if (priv.pressed) { |
| this.refreshGuidePosition(pageY(event) - priv.startY); |
| } |
| }, |
| onMouseUp: function(event) { |
| var priv = privatePool.get(this); |
| if (priv.pressed) { |
| this.hideHandleAndGuide(); |
| priv.pressed = false; |
| this.createPositionData(this.hot.countRows()); |
| this.changeRowPositions(priv.startRow, priv.endRow); |
| Handsontable.hooks.run(this.hot, 'beforeRowMove', priv.startRow, priv.endRow); |
| this.hot.forceFullRender = true; |
| this.hot.view.render(); |
| this.saveManualRowPositions(); |
| Handsontable.hooks.run(this.hot, 'afterRowMove', priv.startRow, priv.endRow); |
| this.setupHandlePosition(this.currentTH); |
| } |
| }, |
| onModifyRow: function(row) { |
| return this.getLogicalRowIndex(row); |
| }, |
| onAfterRemoveRow: function(index, amount) { |
| if (!this.isEnabled()) { |
| return; |
| } |
| var rmindx; |
| var rowpos = this.rowPositions; |
| rmindx = rowpos.splice(index, amount); |
| rowpos = arrayMap(rowpos, function(value, index) { |
| var newpos = value; |
| arrayEach(rmindx, (function(elem, index) { |
| if (value > elem) { |
| newpos--; |
| } |
| })); |
| return newpos; |
| }); |
| this.rowPositions = rowpos; |
| }, |
| onAfterCreateRow: function(index, amount) { |
| if (!this.isEnabled()) { |
| return; |
| } |
| var rowpos = this.rowPositions; |
| if (!rowpos.length) { |
| return; |
| } |
| var addindx = []; |
| for (var i = 0; i < amount; i++) { |
| addindx.push(index + i); |
| } |
| if (index >= rowpos.length) { |
| rowpos = rowpos.concat(addindx); |
| } else { |
| rowpos = arrayMap(rowpos, function(value, ind) { |
| return (value >= index) ? (value + amount) : value; |
| }); |
| rowpos.splice.apply(rowpos, [index, 0].concat(addindx)); |
| } |
| this.rowPositions = rowpos; |
| }, |
| onInit: function() { |
| this.completeSettingsArray(); |
| } |
| }, {}, BasePlugin); |
| ; |
| registerPlugin('ManualRowMove', ManualRowMove); |
| Handsontable.hooks.register('beforeRowMove'); |
| Handsontable.hooks.register('afterRowMove'); |
| |
| //# |
| },{"_base.js":61,"browser":24,"eventManager":42,"helpers/array":43,"helpers/dom/element":47,"helpers/dom/event":48,"helpers/number":52,"plugins":60}],95:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| ManualRowResize: {get: function() { |
| return ManualRowResize; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__95_base_46_js__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47_eventManager__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_event__, |
| $___46__46__47__46__46__47_helpers_47_array__, |
| $___46__46__47__46__46__47_helpers_47_number__, |
| $___46__46__47__46__46__47_plugins__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var BasePlugin = ($___46__46__47__95_base_46_js__ = _dereq_("_base.js"), $___46__46__47__95_base_46_js__ && $___46__46__47__95_base_46_js__.__esModule && $___46__46__47__95_base_46_js__ || {default: $___46__46__47__95_base_46_js__}).default; |
| var $__2 = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__2.addClass, |
| hasClass = $__2.hasClass, |
| removeClass = $__2.removeClass, |
| outerWidth = $__2.outerWidth; |
| var eventManagerObject = ($___46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47_eventManager__}).eventManager; |
| var $__4 = ($___46__46__47__46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47__46__46__47_helpers_47_dom_47_event__ && $___46__46__47__46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_event__}), |
| pageX = $__4.pageX, |
| pageY = $__4.pageY; |
| var arrayEach = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}).arrayEach; |
| var rangeEach = ($___46__46__47__46__46__47_helpers_47_number__ = _dereq_("helpers/number"), $___46__46__47__46__46__47_helpers_47_number__ && $___46__46__47__46__46__47_helpers_47_number__.__esModule && $___46__46__47__46__46__47_helpers_47_number__ || {default: $___46__46__47__46__46__47_helpers_47_number__}).rangeEach; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var ManualRowResize = function ManualRowResize(hotInstance) { |
| $traceurRuntime.superConstructor($ManualRowResize).call(this, hotInstance); |
| this.currentTH = null; |
| this.currentRow = null; |
| this.selectedRows = []; |
| this.currentHeight = null; |
| this.newSize = null; |
| this.startY = null; |
| this.startHeight = null; |
| this.startOffset = null; |
| this.handle = document.createElement('DIV'); |
| this.guide = document.createElement('DIV'); |
| this.eventManager = eventManagerObject(this); |
| this.pressed = null; |
| this.dblclick = 0; |
| this.autoresizeTimeout = null; |
| this.manualRowHeights = []; |
| addClass(this.handle, 'manualRowResizer'); |
| addClass(this.guide, 'manualRowResizerGuide'); |
| }; |
| var $ManualRowResize = ManualRowResize; |
| ($traceurRuntime.createClass)(ManualRowResize, { |
| isEnabled: function() { |
| return this.hot.getSettings().manualRowResize; |
| }, |
| enablePlugin: function() { |
| var $__8 = this; |
| if (this.enabled) { |
| return; |
| } |
| this.manualRowHeights = []; |
| var initialRowHeights = this.hot.getSettings().manualRowResize; |
| var loadedManualRowHeights = this.loadManualRowHeights(); |
| if (typeof loadedManualRowHeights != 'undefined') { |
| this.manualRowHeights = loadedManualRowHeights; |
| } else if (Array.isArray(initialRowHeights)) { |
| this.manualRowHeights = initialRowHeights; |
| } else { |
| this.manualRowHeights = []; |
| } |
| this.addHook('modifyRowHeight', (function(height, row) { |
| return $__8.onModifyRowHeight(height, row); |
| })); |
| Handsontable.hooks.register('beforeRowResize'); |
| Handsontable.hooks.register('afterRowResize'); |
| this.bindEvents(); |
| $traceurRuntime.superGet(this, $ManualRowResize.prototype, "enablePlugin").call(this); |
| }, |
| updatePlugin: function() { |
| var initialRowHeights = this.hot.getSettings().manualRowResize; |
| if (Array.isArray(initialRowHeights)) { |
| this.manualRowHeights = initialRowHeights; |
| } else if (!initialRowHeights) { |
| this.manualRowHeights = []; |
| } |
| }, |
| disablePlugin: function() { |
| $traceurRuntime.superGet(this, $ManualRowResize.prototype, "disablePlugin").call(this); |
| }, |
| saveManualRowHeights: function() { |
| this.hot.runHooks('persistentStateSave', 'manualRowHeights', this.manualRowHeights); |
| }, |
| loadManualRowHeights: function() { |
| var storedState = {}; |
| this.hot.runHooks('persistentStateLoad', 'manualRowHeights', storedState); |
| return storedState.value; |
| }, |
| setupHandlePosition: function(TH) { |
| var $__8 = this; |
| this.currentTH = TH; |
| var row = this.hot.view.wt.wtTable.getCoords(TH).row; |
| var headerWidth = outerWidth(this.currentTH); |
| if (row >= 0) { |
| var box = this.currentTH.getBoundingClientRect(); |
| this.currentRow = row; |
| this.selectedRows = []; |
| if (this.hot.selection.isSelected() && this.hot.selection.selectedHeader.rows) { |
| var $__10 = this.hot.getSelectedRange(), |
| from = $__10.from, |
| to = $__10.to; |
| var start = from.row; |
| var end = to.row; |
| if (start >= end) { |
| start = to.row; |
| end = from.row; |
| } |
| if (this.currentRow >= start && this.currentRow <= end) { |
| rangeEach(start, end, (function(i) { |
| return $__8.selectedRows.push(i); |
| })); |
| } else { |
| this.selectedRows.push(this.currentRow); |
| } |
| } else { |
| this.selectedRows.push(this.currentRow); |
| } |
| this.startOffset = box.top - 6; |
| this.startHeight = parseInt(box.height, 10); |
| this.handle.style.left = box.left + 'px'; |
| this.handle.style.top = this.startOffset + this.startHeight + 'px'; |
| this.handle.style.width = headerWidth + 'px'; |
| this.hot.rootElement.appendChild(this.handle); |
| } |
| }, |
| refreshHandlePosition: function() { |
| this.handle.style.top = this.startOffset + this.currentHeight + 'px'; |
| }, |
| setupGuidePosition: function() { |
| var handleWidth = parseInt(outerWidth(this.handle), 10); |
| var handleRightPosition = parseInt(this.handle.style.left, 10) + handleWidth; |
| var maximumVisibleElementWidth = parseInt(this.hot.view.maximumVisibleElementWidth(0), 10); |
| addClass(this.handle, 'active'); |
| addClass(this.guide, 'active'); |
| this.guide.style.top = this.handle.style.top; |
| this.guide.style.left = handleRightPosition + 'px'; |
| this.guide.style.width = (maximumVisibleElementWidth - handleWidth) + 'px'; |
| this.hot.rootElement.appendChild(this.guide); |
| }, |
| refreshGuidePosition: function() { |
| this.guide.style.top = this.handle.style.top; |
| }, |
| hideHandleAndGuide: function() { |
| removeClass(this.handle, 'active'); |
| removeClass(this.guide, 'active'); |
| }, |
| checkIfRowHeader: function(element) { |
| if (element != this.hot.rootElement) { |
| var parent = element.parentNode; |
| if (parent.tagName === 'TBODY') { |
| return true; |
| } |
| return this.checkIfRowHeader(parent); |
| } |
| return false; |
| }, |
| getTHFromTargetElement: function(element) { |
| if (element.tagName != 'TABLE') { |
| if (element.tagName == 'TH') { |
| return element; |
| } else { |
| return this.getTHFromTargetElement(element.parentNode); |
| } |
| } |
| return null; |
| }, |
| onMouseOver: function(event) { |
| if (this.checkIfRowHeader(event.target)) { |
| var th = this.getTHFromTargetElement(event.target); |
| if (th) { |
| if (!this.pressed) { |
| this.setupHandlePosition(th); |
| } |
| } |
| } |
| }, |
| afterMouseDownTimeout: function() { |
| var $__8 = this; |
| var render = (function() { |
| $__8.hot.forceFullRender = true; |
| $__8.hot.view.render(); |
| $__8.hot.view.wt.wtOverlays.adjustElementsSize(true); |
| }); |
| var resize = (function(selectedRow, forceRender) { |
| var hookNewSize = $__8.hot.runHooks('beforeRowResize', selectedRow, $__8.newSize, true); |
| if (hookNewSize !== void 0) { |
| $__8.newSize = hookNewSize; |
| } |
| $__8.setManualSize(selectedRow, $__8.newSize); |
| if (forceRender) { |
| render(); |
| } |
| $__8.hot.runHooks('afterRowResize', selectedRow, $__8.newSize, true); |
| }); |
| if (this.dblclick >= 2) { |
| var selectedRowsLength = this.selectedRows.length; |
| if (selectedRowsLength > 1) { |
| arrayEach(this.selectedRows, (function(selectedRow) { |
| resize(selectedRow); |
| })); |
| render(); |
| } else { |
| arrayEach(this.selectedRows, (function(selectedRow) { |
| resize(selectedRow, true); |
| })); |
| } |
| } |
| this.dblclick = 0; |
| this.autoresizeTimeout = null; |
| }, |
| onMouseDown: function(event) { |
| var $__8 = this; |
| if (hasClass(event.target, 'manualRowResizer')) { |
| this.setupGuidePosition(); |
| this.pressed = this.hot; |
| if (this.autoresizeTimeout == null) { |
| this.autoresizeTimeout = setTimeout((function() { |
| return $__8.afterMouseDownTimeout(); |
| }), 500); |
| this.hot._registerTimeout(this.autoresizeTimeout); |
| } |
| this.dblclick++; |
| this.startY = pageY(event); |
| this.newSize = this.startHeight; |
| } |
| }, |
| onMouseMove: function(event) { |
| var $__8 = this; |
| if (this.pressed) { |
| this.currentHeight = this.startHeight + (pageY(event) - this.startY); |
| arrayEach(this.selectedRows, (function(selectedRow) { |
| $__8.newSize = $__8.setManualSize(selectedRow, $__8.currentHeight); |
| })); |
| this.refreshHandlePosition(); |
| this.refreshGuidePosition(); |
| } |
| }, |
| onMouseUp: function(event) { |
| var $__8 = this; |
| var render = (function() { |
| $__8.hot.forceFullRender = true; |
| $__8.hot.view.render(); |
| $__8.hot.view.wt.wtOverlays.adjustElementsSize(true); |
| }); |
| var runHooks = (function(selectedRow, forceRender) { |
| $__8.hot.runHooks('beforeRowResize', selectedRow, $__8.newSize); |
| if (forceRender) { |
| render(); |
| } |
| $__8.saveManualRowHeights(); |
| $__8.hot.runHooks('afterRowResize', selectedRow, $__8.newSize); |
| }); |
| if (this.pressed) { |
| this.hideHandleAndGuide(); |
| this.pressed = false; |
| if (this.newSize != this.startHeight) { |
| var selectedRowsLength = this.selectedRows.length; |
| if (selectedRowsLength > 1) { |
| arrayEach(this.selectedRows, (function(selectedRow) { |
| runHooks(selectedRow); |
| })); |
| render(); |
| } else { |
| arrayEach(this.selectedRows, (function(selectedRow) { |
| runHooks(selectedRow, true); |
| })); |
| } |
| } |
| this.setupHandlePosition(this.currentTH); |
| } |
| }, |
| bindEvents: function() { |
| var $__8 = this; |
| this.eventManager.addEventListener(this.hot.rootElement, 'mouseover', (function(e) { |
| return $__8.onMouseOver(e); |
| })); |
| this.eventManager.addEventListener(this.hot.rootElement, 'mousedown', (function(e) { |
| return $__8.onMouseDown(e); |
| })); |
| this.eventManager.addEventListener(window, 'mousemove', (function(e) { |
| return $__8.onMouseMove(e); |
| })); |
| this.eventManager.addEventListener(window, 'mouseup', (function(e) { |
| return $__8.onMouseUp(e); |
| })); |
| }, |
| setManualSize: function(row, height) { |
| row = this.hot.runHooks('modifyRow', row); |
| this.manualRowHeights[row] = height; |
| return height; |
| }, |
| onModifyRowHeight: function(height, row) { |
| if (this.enabled) { |
| var autoRowSizePlugin = this.hot.getPlugin('autoRowSize'); |
| var autoRowHeightResult = autoRowSizePlugin ? autoRowSizePlugin.heights[row] : null; |
| row = this.hot.runHooks('modifyRow', row); |
| var manualRowHeight = this.manualRowHeights[row]; |
| if (manualRowHeight !== void 0 && (manualRowHeight === autoRowHeightResult || manualRowHeight > (height || 0))) { |
| return manualRowHeight; |
| } |
| } |
| return height; |
| } |
| }, {}, BasePlugin); |
| ; |
| registerPlugin('manualRowResize', ManualRowResize); |
| |
| //# |
| },{"_base.js":61,"browser":24,"eventManager":42,"helpers/array":43,"helpers/dom/element":47,"helpers/dom/event":48,"helpers/number":52,"plugins":60}],96:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| MergeCells: {get: function() { |
| return MergeCells; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_plugins__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_event__, |
| $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__, |
| $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__, |
| $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_table__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var stopImmediatePropagation = ($___46__46__47__46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47__46__46__47_helpers_47_dom_47_event__ && $___46__46__47__46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_event__}).stopImmediatePropagation; |
| var WalkontableCellCoords = ($___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ = _dereq_("3rdparty/walkontable/src/cell/coords"), $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__.__esModule && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ || {default: $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__}).WalkontableCellCoords; |
| var WalkontableCellRange = ($___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__ = _dereq_("3rdparty/walkontable/src/cell/range"), $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__ && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__.__esModule && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__ || {default: $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_range__}).WalkontableCellRange; |
| var WalkontableTable = ($___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_table__ = _dereq_("3rdparty/walkontable/src/table"), $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_table__ && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_table__.__esModule && $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_table__ || {default: $___46__46__47__46__46__47_3rdparty_47_walkontable_47_src_47_table__}).WalkontableTable; |
| ; |
| function CellInfoCollection() { |
| var collection = []; |
| collection.getInfo = function(row, col) { |
| for (var i = 0, |
| ilen = this.length; i < ilen; i++) { |
| if (this[i].row <= row && this[i].row + this[i].rowspan - 1 >= row && this[i].col <= col && this[i].col + this[i].colspan - 1 >= col) { |
| return this[i]; |
| } |
| } |
| }; |
| collection.setInfo = function(info) { |
| for (var i = 0, |
| ilen = this.length; i < ilen; i++) { |
| if (this[i].row === info.row && this[i].col === info.col) { |
| this[i] = info; |
| return; |
| } |
| } |
| this.push(info); |
| }; |
| collection.removeInfo = function(row, col) { |
| for (var i = 0, |
| ilen = this.length; i < ilen; i++) { |
| if (this[i].row === row && this[i].col === col) { |
| this.splice(i, 1); |
| break; |
| } |
| } |
| }; |
| return collection; |
| } |
| function MergeCells(mergeCellsSetting) { |
| this.mergedCellInfoCollection = new CellInfoCollection(); |
| if (Array.isArray(mergeCellsSetting)) { |
| for (var i = 0, |
| ilen = mergeCellsSetting.length; i < ilen; i++) { |
| this.mergedCellInfoCollection.setInfo(mergeCellsSetting[i]); |
| } |
| } |
| } |
| MergeCells.prototype.canMergeRange = function(cellRange) { |
| return !cellRange.isSingle(); |
| }; |
| MergeCells.prototype.mergeRange = function(cellRange) { |
| if (!this.canMergeRange(cellRange)) { |
| return; |
| } |
| var topLeft = cellRange.getTopLeftCorner(); |
| var bottomRight = cellRange.getBottomRightCorner(); |
| var mergeParent = {}; |
| mergeParent.row = topLeft.row; |
| mergeParent.col = topLeft.col; |
| mergeParent.rowspan = bottomRight.row - topLeft.row + 1; |
| mergeParent.colspan = bottomRight.col - topLeft.col + 1; |
| this.mergedCellInfoCollection.setInfo(mergeParent); |
| }; |
| MergeCells.prototype.mergeOrUnmergeSelection = function(cellRange) { |
| var info = this.mergedCellInfoCollection.getInfo(cellRange.from.row, cellRange.from.col); |
| if (info) { |
| this.unmergeSelection(cellRange.from); |
| } else { |
| this.mergeSelection(cellRange); |
| } |
| }; |
| MergeCells.prototype.mergeSelection = function(cellRange) { |
| this.mergeRange(cellRange); |
| }; |
| MergeCells.prototype.unmergeSelection = function(cellRange) { |
| var info = this.mergedCellInfoCollection.getInfo(cellRange.row, cellRange.col); |
| this.mergedCellInfoCollection.removeInfo(info.row, info.col); |
| }; |
| MergeCells.prototype.applySpanProperties = function(TD, row, col) { |
| var info = this.mergedCellInfoCollection.getInfo(row, col); |
| if (info) { |
| if (info.row === row && info.col === col) { |
| TD.setAttribute('rowspan', info.rowspan); |
| TD.setAttribute('colspan', info.colspan); |
| } else { |
| TD.removeAttribute('rowspan'); |
| TD.removeAttribute('colspan'); |
| TD.style.display = 'none'; |
| } |
| } else { |
| TD.removeAttribute('rowspan'); |
| TD.removeAttribute('colspan'); |
| } |
| }; |
| MergeCells.prototype.modifyTransform = function(hook, currentSelectedRange, delta) { |
| var sameRowspan = function(merged, coords) { |
| if (coords.row >= merged.row && coords.row <= (merged.row + merged.rowspan - 1)) { |
| return true; |
| } |
| return false; |
| }, |
| sameColspan = function(merged, coords) { |
| if (coords.col >= merged.col && coords.col <= (merged.col + merged.colspan - 1)) { |
| return true; |
| } |
| return false; |
| }, |
| getNextPosition = function(newDelta) { |
| return new WalkontableCellCoords(currentSelectedRange.to.row + newDelta.row, currentSelectedRange.to.col + newDelta.col); |
| }; |
| var newDelta = { |
| row: delta.row, |
| col: delta.col |
| }; |
| if (hook == 'modifyTransformStart') { |
| if (!this.lastDesiredCoords) { |
| this.lastDesiredCoords = new WalkontableCellCoords(null, null); |
| } |
| var currentPosition = new WalkontableCellCoords(currentSelectedRange.highlight.row, currentSelectedRange.highlight.col), |
| mergedParent = this.mergedCellInfoCollection.getInfo(currentPosition.row, currentPosition.col), |
| currentRangeContainsMerge; |
| for (var i = 0, |
| mergesLength = this.mergedCellInfoCollection.length; i < mergesLength; i++) { |
| var range = this.mergedCellInfoCollection[i]; |
| range = new WalkontableCellCoords(range.row + range.rowspan - 1, range.col + range.colspan - 1); |
| if (currentSelectedRange.includes(range)) { |
| currentRangeContainsMerge = true; |
| break; |
| } |
| } |
| if (mergedParent) { |
| var mergeTopLeft = new WalkontableCellCoords(mergedParent.row, mergedParent.col), |
| mergeBottomRight = new WalkontableCellCoords(mergedParent.row + mergedParent.rowspan - 1, mergedParent.col + mergedParent.colspan - 1), |
| mergeRange = new WalkontableCellRange(mergeTopLeft, mergeTopLeft, mergeBottomRight); |
| if (!mergeRange.includes(this.lastDesiredCoords)) { |
| this.lastDesiredCoords = new WalkontableCellCoords(null, null); |
| } |
| newDelta.row = this.lastDesiredCoords.row ? this.lastDesiredCoords.row - currentPosition.row : newDelta.row; |
| newDelta.col = this.lastDesiredCoords.col ? this.lastDesiredCoords.col - currentPosition.col : newDelta.col; |
| if (delta.row > 0) { |
| newDelta.row = mergedParent.row + mergedParent.rowspan - 1 - currentPosition.row + delta.row; |
| } else if (delta.row < 0) { |
| newDelta.row = currentPosition.row - mergedParent.row + delta.row; |
| } |
| if (delta.col > 0) { |
| newDelta.col = mergedParent.col + mergedParent.colspan - 1 - currentPosition.col + delta.col; |
| } else if (delta.col < 0) { |
| newDelta.col = currentPosition.col - mergedParent.col + delta.col; |
| } |
| } |
| var nextPosition = new WalkontableCellCoords(currentSelectedRange.highlight.row + newDelta.row, currentSelectedRange.highlight.col + newDelta.col), |
| nextParentIsMerged = this.mergedCellInfoCollection.getInfo(nextPosition.row, nextPosition.col); |
| if (nextParentIsMerged) { |
| this.lastDesiredCoords = nextPosition; |
| newDelta = { |
| row: nextParentIsMerged.row - currentPosition.row, |
| col: nextParentIsMerged.col - currentPosition.col |
| }; |
| } |
| } else if (hook == 'modifyTransformEnd') { |
| for (var i = 0, |
| mergesLength = this.mergedCellInfoCollection.length; i < mergesLength; i++) { |
| var currentMerge = this.mergedCellInfoCollection[i], |
| mergeTopLeft = new WalkontableCellCoords(currentMerge.row, currentMerge.col), |
| mergeBottomRight = new WalkontableCellCoords(currentMerge.row + currentMerge.rowspan - 1, currentMerge.col + currentMerge.colspan - 1), |
| mergedRange = new WalkontableCellRange(mergeTopLeft, mergeTopLeft, mergeBottomRight), |
| sharedBorders = currentSelectedRange.getBordersSharedWith(mergedRange); |
| if (mergedRange.isEqual(currentSelectedRange)) { |
| currentSelectedRange.setDirection('NW-SE'); |
| } else if (sharedBorders.length > 0) { |
| var mergeHighlighted = (currentSelectedRange.highlight.isEqual(mergedRange.from)); |
| if (sharedBorders.indexOf('top') > -1) { |
| if (currentSelectedRange.to.isSouthEastOf(mergedRange.from) && mergeHighlighted) { |
| currentSelectedRange.setDirection('NW-SE'); |
| } else if (currentSelectedRange.to.isSouthWestOf(mergedRange.from) && mergeHighlighted) { |
| currentSelectedRange.setDirection('NE-SW'); |
| } |
| } else if (sharedBorders.indexOf('bottom') > -1) { |
| if (currentSelectedRange.to.isNorthEastOf(mergedRange.from) && mergeHighlighted) { |
| currentSelectedRange.setDirection('SW-NE'); |
| } else if (currentSelectedRange.to.isNorthWestOf(mergedRange.from) && mergeHighlighted) { |
| currentSelectedRange.setDirection('SE-NW'); |
| } |
| } |
| } |
| var nextPosition = getNextPosition(newDelta), |
| withinRowspan = sameRowspan(currentMerge, nextPosition), |
| withinColspan = sameColspan(currentMerge, nextPosition); |
| if (currentSelectedRange.includesRange(mergedRange) && (mergedRange.includes(nextPosition) || withinRowspan || withinColspan)) { |
| if (withinRowspan) { |
| if (newDelta.row < 0) { |
| newDelta.row -= currentMerge.rowspan - 1; |
| } else if (newDelta.row > 0) { |
| newDelta.row += currentMerge.rowspan - 1; |
| } |
| } |
| if (withinColspan) { |
| if (newDelta.col < 0) { |
| newDelta.col -= currentMerge.colspan - 1; |
| } else if (newDelta.col > 0) { |
| newDelta.col += currentMerge.colspan - 1; |
| } |
| } |
| } |
| } |
| } |
| if (newDelta.row !== 0) { |
| delta.row = newDelta.row; |
| } |
| if (newDelta.col !== 0) { |
| delta.col = newDelta.col; |
| } |
| }; |
| MergeCells.prototype.shiftCollection = function(direction, index, count) { |
| var shiftVector = [0, 0]; |
| switch (direction) { |
| case 'right': |
| shiftVector[0] += 1; |
| break; |
| case 'left': |
| shiftVector[0] -= 1; |
| break; |
| case 'down': |
| shiftVector[1] += 1; |
| break; |
| case 'up': |
| shiftVector[1] -= 1; |
| break; |
| } |
| for (var i = 0; i < this.mergedCellInfoCollection.length; i++) { |
| var currentMerge = this.mergedCellInfoCollection[i]; |
| if (direction === 'right' || direction === 'left') { |
| if (index <= currentMerge.col) { |
| currentMerge.col += shiftVector[0]; |
| } |
| } else { |
| if (index <= currentMerge.row) { |
| currentMerge.row += shiftVector[1]; |
| } |
| } |
| } |
| }; |
| var beforeInit = function() { |
| var instance = this; |
| var mergeCellsSetting = instance.getSettings().mergeCells; |
| if (mergeCellsSetting) { |
| if (!instance.mergeCells) { |
| instance.mergeCells = new MergeCells(mergeCellsSetting); |
| } |
| } |
| }; |
| var afterInit = function() { |
| var instance = this; |
| if (instance.mergeCells) { |
| instance.view.wt.wtTable.getCell = function(coords) { |
| if (instance.getSettings().mergeCells) { |
| var mergeParent = instance.mergeCells.mergedCellInfoCollection.getInfo(coords.row, coords.col); |
| if (mergeParent) { |
| coords = mergeParent; |
| } |
| } |
| return WalkontableTable.prototype.getCell.call(this, coords); |
| }; |
| } |
| }; |
| var afterUpdateSettings = function() { |
| var instance = this; |
| var mergeCellsSetting = instance.getSettings().mergeCells; |
| if (mergeCellsSetting) { |
| if (instance.mergeCells) { |
| instance.mergeCells.mergedCellInfoCollection = new CellInfoCollection(); |
| if (Array.isArray(mergeCellsSetting)) { |
| for (var i = 0, |
| ilen = mergeCellsSetting.length; i < ilen; i++) { |
| instance.mergeCells.mergedCellInfoCollection.setInfo(mergeCellsSetting[i]); |
| } |
| } |
| } else { |
| instance.mergeCells = new MergeCells(mergeCellsSetting); |
| } |
| } else { |
| if (instance.mergeCells) { |
| instance.mergeCells.mergedCellInfoCollection = new CellInfoCollection(); |
| } |
| } |
| }; |
| var onBeforeKeyDown = function(event) { |
| if (!this.mergeCells) { |
| return; |
| } |
| var ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey; |
| if (ctrlDown) { |
| if (event.keyCode === 77) { |
| this.mergeCells.mergeOrUnmergeSelection(this.getSelectedRange()); |
| this.render(); |
| stopImmediatePropagation(event); |
| } |
| } |
| }; |
| var addMergeActionsToContextMenu = function(defaultOptions) { |
| if (!this.getSettings().mergeCells) { |
| return; |
| } |
| defaultOptions.items.push(Handsontable.plugins.ContextMenu.SEPARATOR); |
| defaultOptions.items.push({ |
| key: 'mergeCells', |
| name: function() { |
| var sel = this.getSelected(); |
| var info = this.mergeCells.mergedCellInfoCollection.getInfo(sel[0], sel[1]); |
| if (info) { |
| return 'Unmerge cells'; |
| } else { |
| return 'Merge cells'; |
| } |
| }, |
| callback: function() { |
| this.mergeCells.mergeOrUnmergeSelection(this.getSelectedRange()); |
| this.render(); |
| }, |
| disabled: function() { |
| return this.selection.selectedHeader.corner; |
| } |
| }); |
| }; |
| var afterRenderer = function(TD, row, col, prop, value, cellProperties) { |
| if (this.mergeCells) { |
| this.mergeCells.applySpanProperties(TD, row, col); |
| } |
| }; |
| var modifyTransformFactory = function(hook) { |
| return function(delta) { |
| var mergeCellsSetting = this.getSettings().mergeCells; |
| if (mergeCellsSetting) { |
| var currentSelectedRange = this.getSelectedRange(); |
| this.mergeCells.modifyTransform(hook, currentSelectedRange, delta); |
| if (hook === 'modifyTransformEnd') { |
| var totalRows = this.countRows(); |
| var totalCols = this.countCols(); |
| if (currentSelectedRange.from.row < 0) { |
| currentSelectedRange.from.row = 0; |
| } else if (currentSelectedRange.from.row > 0 && currentSelectedRange.from.row >= totalRows) { |
| currentSelectedRange.from.row = currentSelectedRange.from - 1; |
| } |
| if (currentSelectedRange.from.col < 0) { |
| currentSelectedRange.from.col = 0; |
| } else if (currentSelectedRange.from.col > 0 && currentSelectedRange.from.col >= totalCols) { |
| currentSelectedRange.from.col = totalCols - 1; |
| } |
| } |
| } |
| }; |
| }; |
| var beforeSetRangeEnd = function(coords) { |
| this.lastDesiredCoords = null; |
| var mergeCellsSetting = this.getSettings().mergeCells; |
| if (mergeCellsSetting) { |
| var selRange = this.getSelectedRange(); |
| selRange.highlight = new WalkontableCellCoords(selRange.highlight.row, selRange.highlight.col); |
| selRange.to = coords; |
| var rangeExpanded = false; |
| do { |
| rangeExpanded = false; |
| for (var i = 0, |
| ilen = this.mergeCells.mergedCellInfoCollection.length; i < ilen; i++) { |
| var cellInfo = this.mergeCells.mergedCellInfoCollection[i]; |
| var mergedCellTopLeft = new WalkontableCellCoords(cellInfo.row, cellInfo.col); |
| var mergedCellBottomRight = new WalkontableCellCoords(cellInfo.row + cellInfo.rowspan - 1, cellInfo.col + cellInfo.colspan - 1); |
| var mergedCellRange = new WalkontableCellRange(mergedCellTopLeft, mergedCellTopLeft, mergedCellBottomRight); |
| if (selRange.expandByRange(mergedCellRange)) { |
| coords.row = selRange.to.row; |
| coords.col = selRange.to.col; |
| rangeExpanded = true; |
| } |
| } |
| } while (rangeExpanded); |
| } |
| }; |
| var beforeDrawAreaBorders = function(corners, className) { |
| if (className && className == 'area') { |
| var mergeCellsSetting = this.getSettings().mergeCells; |
| if (mergeCellsSetting) { |
| var selRange = this.getSelectedRange(); |
| var startRange = new WalkontableCellRange(selRange.from, selRange.from, selRange.from); |
| var stopRange = new WalkontableCellRange(selRange.to, selRange.to, selRange.to); |
| for (var i = 0, |
| ilen = this.mergeCells.mergedCellInfoCollection.length; i < ilen; i++) { |
| var cellInfo = this.mergeCells.mergedCellInfoCollection[i]; |
| var mergedCellTopLeft = new WalkontableCellCoords(cellInfo.row, cellInfo.col); |
| var mergedCellBottomRight = new WalkontableCellCoords(cellInfo.row + cellInfo.rowspan - 1, cellInfo.col + cellInfo.colspan - 1); |
| var mergedCellRange = new WalkontableCellRange(mergedCellTopLeft, mergedCellTopLeft, mergedCellBottomRight); |
| if (startRange.expandByRange(mergedCellRange)) { |
| corners[0] = startRange.from.row; |
| corners[1] = startRange.from.col; |
| } |
| if (stopRange.expandByRange(mergedCellRange)) { |
| corners[2] = stopRange.from.row; |
| corners[3] = stopRange.from.col; |
| } |
| } |
| } |
| } |
| }; |
| var afterGetCellMeta = function(row, col, cellProperties) { |
| var mergeCellsSetting = this.getSettings().mergeCells; |
| if (mergeCellsSetting) { |
| var mergeParent = this.mergeCells.mergedCellInfoCollection.getInfo(row, col); |
| if (mergeParent && (mergeParent.row != row || mergeParent.col != col)) { |
| cellProperties.copyable = false; |
| } |
| } |
| }; |
| var afterViewportRowCalculatorOverride = function(calc) { |
| var mergeCellsSetting = this.getSettings().mergeCells; |
| if (mergeCellsSetting) { |
| var colCount = this.countCols(); |
| var mergeParent; |
| for (var c = 0; c < colCount; c++) { |
| mergeParent = this.mergeCells.mergedCellInfoCollection.getInfo(calc.startRow, c); |
| if (mergeParent) { |
| if (mergeParent.row < calc.startRow) { |
| calc.startRow = mergeParent.row; |
| return afterViewportRowCalculatorOverride.call(this, calc); |
| } |
| } |
| mergeParent = this.mergeCells.mergedCellInfoCollection.getInfo(calc.endRow, c); |
| if (mergeParent) { |
| var mergeEnd = mergeParent.row + mergeParent.rowspan - 1; |
| if (mergeEnd > calc.endRow) { |
| calc.endRow = mergeEnd; |
| return afterViewportRowCalculatorOverride.call(this, calc); |
| } |
| } |
| } |
| } |
| }; |
| var afterViewportColumnCalculatorOverride = function(calc) { |
| var mergeCellsSetting = this.getSettings().mergeCells; |
| if (mergeCellsSetting) { |
| var rowCount = this.countRows(); |
| var mergeParent; |
| for (var r = 0; r < rowCount; r++) { |
| mergeParent = this.mergeCells.mergedCellInfoCollection.getInfo(r, calc.startColumn); |
| if (mergeParent) { |
| if (mergeParent.col < calc.startColumn) { |
| calc.startColumn = mergeParent.col; |
| return afterViewportColumnCalculatorOverride.call(this, calc); |
| } |
| } |
| mergeParent = this.mergeCells.mergedCellInfoCollection.getInfo(r, calc.endColumn); |
| if (mergeParent) { |
| var mergeEnd = mergeParent.col + mergeParent.colspan - 1; |
| if (mergeEnd > calc.endColumn) { |
| calc.endColumn = mergeEnd; |
| return afterViewportColumnCalculatorOverride.call(this, calc); |
| } |
| } |
| } |
| } |
| }; |
| var isMultipleSelection = function(isMultiple) { |
| if (isMultiple && this.mergeCells) { |
| var mergedCells = this.mergeCells.mergedCellInfoCollection, |
| selectionRange = this.getSelectedRange(); |
| for (var group in mergedCells) { |
| if (selectionRange.highlight.row == mergedCells[group].row && selectionRange.highlight.col == mergedCells[group].col && selectionRange.to.row == mergedCells[group].row + mergedCells[group].rowspan - 1 && selectionRange.to.col == mergedCells[group].col + mergedCells[group].colspan - 1) { |
| return false; |
| } |
| } |
| } |
| return isMultiple; |
| }; |
| function afterAutofillApplyValues(select, drag) { |
| var mergeCellsSetting = this.getSettings().mergeCells; |
| if (!mergeCellsSetting || this.selection.isMultiple()) { |
| return; |
| } |
| var info = this.mergeCells.mergedCellInfoCollection.getInfo(select[0], select[1]); |
| if (info) { |
| select[0] = info.row; |
| select[1] = info.col; |
| select[2] = info.row + info.rowspan - 1; |
| select[3] = info.col + info.colspan - 1; |
| } |
| } |
| function onAfterCreateCol(col, count) { |
| if (this.mergeCells) { |
| this.mergeCells.shiftCollection('right', col, count); |
| } |
| } |
| function onAfterRemoveCol(col, count) { |
| if (this.mergeCells) { |
| this.mergeCells.shiftCollection('left', col, count); |
| } |
| } |
| function onAfterCreateRow(row, count) { |
| if (this.mergeCells) { |
| this.mergeCells.shiftCollection('down', row, count); |
| } |
| } |
| function onAfterRemoveRow(row, count) { |
| if (this.mergeCells) { |
| this.mergeCells.shiftCollection('up', row, count); |
| } |
| } |
| Handsontable.hooks.add('beforeInit', beforeInit); |
| Handsontable.hooks.add('afterInit', afterInit); |
| Handsontable.hooks.add('afterUpdateSettings', afterUpdateSettings); |
| Handsontable.hooks.add('beforeKeyDown', onBeforeKeyDown); |
| Handsontable.hooks.add('modifyTransformStart', modifyTransformFactory('modifyTransformStart')); |
| Handsontable.hooks.add('modifyTransformEnd', modifyTransformFactory('modifyTransformEnd')); |
| Handsontable.hooks.add('beforeSetRangeEnd', beforeSetRangeEnd); |
| Handsontable.hooks.add('beforeDrawBorders', beforeDrawAreaBorders); |
| Handsontable.hooks.add('afterIsMultipleSelection', isMultipleSelection); |
| Handsontable.hooks.add('afterRenderer', afterRenderer); |
| Handsontable.hooks.add('afterContextMenuDefaultOptions', addMergeActionsToContextMenu); |
| Handsontable.hooks.add('afterGetCellMeta', afterGetCellMeta); |
| Handsontable.hooks.add('afterViewportRowCalculatorOverride', afterViewportRowCalculatorOverride); |
| Handsontable.hooks.add('afterViewportColumnCalculatorOverride', afterViewportColumnCalculatorOverride); |
| Handsontable.hooks.add('afterAutofillApplyValues', afterAutofillApplyValues); |
| Handsontable.hooks.add('afterCreateCol', onAfterCreateCol); |
| Handsontable.hooks.add('afterRemoveCol', onAfterRemoveCol); |
| Handsontable.hooks.add('afterCreateRow', onAfterCreateRow); |
| Handsontable.hooks.add('afterRemoveRow', onAfterRemoveRow); |
| Handsontable.MergeCells = MergeCells; |
| |
| //# |
| },{"3rdparty/walkontable/src/cell/coords":6,"3rdparty/walkontable/src/cell/range":7,"3rdparty/walkontable/src/table":21,"browser":24,"helpers/dom/event":48,"plugins":60}],97:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| MultipleSelectionHandles: {get: function() { |
| return MultipleSelectionHandles; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47_helpers_47_browser__, |
| $___46__46__47__95_base__, |
| $___46__46__47__46__46__47_eventManager__, |
| $___46__46__47__46__46__47_plugins__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| getWindowScrollTop = $__1.getWindowScrollTop, |
| hasClass = $__1.hasClass, |
| getWindowScrollLeft = $__1.getWindowScrollLeft; |
| var isMobileBrowser = ($___46__46__47__46__46__47_helpers_47_browser__ = _dereq_("helpers/browser"), $___46__46__47__46__46__47_helpers_47_browser__ && $___46__46__47__46__46__47_helpers_47_browser__.__esModule && $___46__46__47__46__46__47_helpers_47_browser__ || {default: $___46__46__47__46__46__47_helpers_47_browser__}).isMobileBrowser; |
| var BasePlugin = ($___46__46__47__95_base__ = _dereq_("_base"), $___46__46__47__95_base__ && $___46__46__47__95_base__.__esModule && $___46__46__47__95_base__ || {default: $___46__46__47__95_base__}).default; |
| var EventManager = ($___46__46__47__46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47__46__46__47_eventManager__ && $___46__46__47__46__46__47_eventManager__.__esModule && $___46__46__47__46__46__47_eventManager__ || {default: $___46__46__47__46__46__47_eventManager__}).EventManager; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var MultipleSelectionHandles = function MultipleSelectionHandles(hotInstance) { |
| $traceurRuntime.superConstructor($MultipleSelectionHandles).call(this, hotInstance); |
| this.dragged = []; |
| this.eventManager = null; |
| this.lastSetCell = null; |
| }; |
| var $MultipleSelectionHandles = MultipleSelectionHandles; |
| ($traceurRuntime.createClass)(MultipleSelectionHandles, { |
| isEnabled: function() { |
| return isMobileBrowser(); |
| }, |
| enablePlugin: function() { |
| if (this.enabled) { |
| return; |
| } |
| if (!this.eventManager) { |
| this.eventManager = new EventManager(this); |
| } |
| this.registerListeners(); |
| $traceurRuntime.superGet(this, $MultipleSelectionHandles.prototype, "enablePlugin").call(this); |
| }, |
| registerListeners: function() { |
| var _this = this; |
| function removeFromDragged(query) { |
| if (_this.dragged.length === 1) { |
| _this.dragged.splice(0, _this.dragged.length); |
| return true; |
| } |
| var entryPosition = _this.dragged.indexOf(query); |
| if (entryPosition == -1) { |
| return false; |
| } else if (entryPosition === 0) { |
| _this.dragged = _this.dragged.slice(0, 1); |
| } else if (entryPosition == 1) { |
| _this.dragged = _this.dragged.slice(-1); |
| } |
| } |
| this.eventManager.addEventListener(this.hot.rootElement, 'touchstart', function(event) { |
| var selectedRange; |
| if (hasClass(event.target, 'topLeftSelectionHandle-HitArea')) { |
| selectedRange = _this.hot.getSelectedRange(); |
| _this.dragged.push('topLeft'); |
| _this.touchStartRange = { |
| width: selectedRange.getWidth(), |
| height: selectedRange.getHeight(), |
| direction: selectedRange.getDirection() |
| }; |
| event.preventDefault(); |
| return false; |
| } else if (hasClass(event.target, 'bottomRightSelectionHandle-HitArea')) { |
| selectedRange = _this.hot.getSelectedRange(); |
| _this.dragged.push('bottomRight'); |
| _this.touchStartRange = { |
| width: selectedRange.getWidth(), |
| height: selectedRange.getHeight(), |
| direction: selectedRange.getDirection() |
| }; |
| event.preventDefault(); |
| return false; |
| } |
| }); |
| this.eventManager.addEventListener(this.hot.rootElement, 'touchend', function(event) { |
| if (hasClass(event.target, 'topLeftSelectionHandle-HitArea')) { |
| removeFromDragged.call(_this, 'topLeft'); |
| _this.touchStartRange = void 0; |
| event.preventDefault(); |
| return false; |
| } else if (hasClass(event.target, 'bottomRightSelectionHandle-HitArea')) { |
| removeFromDragged.call(_this, 'bottomRight'); |
| _this.touchStartRange = void 0; |
| event.preventDefault(); |
| return false; |
| } |
| }); |
| this.eventManager.addEventListener(this.hot.rootElement, 'touchmove', function(event) { |
| var scrollTop = getWindowScrollTop(), |
| scrollLeft = getWindowScrollLeft(), |
| endTarget, |
| targetCoords, |
| selectedRange, |
| rangeWidth, |
| rangeHeight, |
| rangeDirection, |
| newRangeCoords; |
| if (_this.dragged.length === 0) { |
| return; |
| } |
| endTarget = document.elementFromPoint(event.touches[0].screenX - scrollLeft, event.touches[0].screenY - scrollTop); |
| if (!endTarget || endTarget === _this.lastSetCell) { |
| return; |
| } |
| if (endTarget.nodeName == 'TD' || endTarget.nodeName == 'TH') { |
| targetCoords = _this.hot.getCoords(endTarget); |
| if (targetCoords.col == -1) { |
| targetCoords.col = 0; |
| } |
| selectedRange = _this.hot.getSelectedRange(); |
| rangeWidth = selectedRange.getWidth(); |
| rangeHeight = selectedRange.getHeight(); |
| rangeDirection = selectedRange.getDirection(); |
| if (rangeWidth == 1 && rangeHeight == 1) { |
| _this.hot.selection.setRangeEnd(targetCoords); |
| } |
| newRangeCoords = _this.getCurrentRangeCoords(selectedRange, targetCoords, _this.touchStartRange.direction, rangeDirection, _this.dragged[0]); |
| if (newRangeCoords.start !== null) { |
| _this.hot.selection.setRangeStart(newRangeCoords.start); |
| } |
| _this.hot.selection.setRangeEnd(newRangeCoords.end); |
| _this.lastSetCell = endTarget; |
| } |
| event.preventDefault(); |
| }); |
| }, |
| getCurrentRangeCoords: function(selectedRange, currentTouch, touchStartDirection, currentDirection, draggedHandle) { |
| var topLeftCorner = selectedRange.getTopLeftCorner(), |
| bottomRightCorner = selectedRange.getBottomRightCorner(), |
| bottomLeftCorner = selectedRange.getBottomLeftCorner(), |
| topRightCorner = selectedRange.getTopRightCorner(); |
| var newCoords = { |
| start: null, |
| end: null |
| }; |
| switch (touchStartDirection) { |
| case 'NE-SW': |
| switch (currentDirection) { |
| case 'NE-SW': |
| case 'NW-SE': |
| if (draggedHandle == 'topLeft') { |
| newCoords = { |
| start: new WalkontableCellCoords(currentTouch.row, selectedRange.highlight.col), |
| end: new WalkontableCellCoords(bottomLeftCorner.row, currentTouch.col) |
| }; |
| } else { |
| newCoords = { |
| start: new WalkontableCellCoords(selectedRange.highlight.row, currentTouch.col), |
| end: new WalkontableCellCoords(currentTouch.row, topLeftCorner.col) |
| }; |
| } |
| break; |
| case 'SE-NW': |
| if (draggedHandle == 'bottomRight') { |
| newCoords = { |
| start: new WalkontableCellCoords(bottomRightCorner.row, currentTouch.col), |
| end: new WalkontableCellCoords(currentTouch.row, topLeftCorner.col) |
| }; |
| } |
| break; |
| } |
| break; |
| case 'NW-SE': |
| switch (currentDirection) { |
| case 'NE-SW': |
| if (draggedHandle == 'topLeft') { |
| newCoords = { |
| start: currentTouch, |
| end: bottomLeftCorner |
| }; |
| } else { |
| newCoords.end = currentTouch; |
| } |
| break; |
| case 'NW-SE': |
| if (draggedHandle == 'topLeft') { |
| newCoords = { |
| start: currentTouch, |
| end: bottomRightCorner |
| }; |
| } else { |
| newCoords.end = currentTouch; |
| } |
| break; |
| case 'SE-NW': |
| if (draggedHandle == 'topLeft') { |
| newCoords = { |
| start: currentTouch, |
| end: topLeftCorner |
| }; |
| } else { |
| newCoords.end = currentTouch; |
| } |
| break; |
| case 'SW-NE': |
| if (draggedHandle == 'topLeft') { |
| newCoords = { |
| start: currentTouch, |
| end: topRightCorner |
| }; |
| } else { |
| newCoords.end = currentTouch; |
| } |
| break; |
| } |
| break; |
| case 'SW-NE': |
| switch (currentDirection) { |
| case 'NW-SE': |
| if (draggedHandle == 'bottomRight') { |
| newCoords = { |
| start: new WalkontableCellCoords(currentTouch.row, topLeftCorner.col), |
| end: new WalkontableCellCoords(bottomLeftCorner.row, currentTouch.col) |
| }; |
| } else { |
| newCoords = { |
| start: new WalkontableCellCoords(topLeftCorner.row, currentTouch.col), |
| end: new WalkontableCellCoords(currentTouch.row, bottomRightCorner.col) |
| }; |
| } |
| break; |
| case 'SW-NE': |
| if (draggedHandle == 'topLeft') { |
| newCoords = { |
| start: new WalkontableCellCoords(selectedRange.highlight.row, currentTouch.col), |
| end: new WalkontableCellCoords(currentTouch.row, bottomRightCorner.col) |
| }; |
| } else { |
| newCoords = { |
| start: new WalkontableCellCoords(currentTouch.row, topLeftCorner.col), |
| end: new WalkontableCellCoords(topLeftCorner.row, currentTouch.col) |
| }; |
| } |
| break; |
| case 'SE-NW': |
| if (draggedHandle == 'bottomRight') { |
| newCoords = { |
| start: new WalkontableCellCoords(currentTouch.row, topRightCorner.col), |
| end: new WalkontableCellCoords(topLeftCorner.row, currentTouch.col) |
| }; |
| } else if (draggedHandle == 'topLeft') { |
| newCoords = { |
| start: bottomLeftCorner, |
| end: currentTouch |
| }; |
| } |
| break; |
| } |
| break; |
| case 'SE-NW': |
| switch (currentDirection) { |
| case 'NW-SE': |
| case 'NE-SW': |
| case 'SW-NE': |
| if (draggedHandle == 'topLeft') { |
| newCoords.end = currentTouch; |
| } |
| break; |
| case 'SE-NW': |
| if (draggedHandle == 'topLeft') { |
| newCoords.end = currentTouch; |
| } else { |
| newCoords = { |
| start: currentTouch, |
| end: topLeftCorner |
| }; |
| } |
| break; |
| } |
| break; |
| } |
| return newCoords; |
| }, |
| isDragged: function() { |
| return this.dragged.length > 0; |
| } |
| }, {}, BasePlugin); |
| ; |
| registerPlugin('multipleSelectionHandles', MultipleSelectionHandles); |
| |
| //# |
| },{"_base":61,"browser":24,"eventManager":42,"helpers/browser":44,"helpers/dom/element":47,"plugins":60}],98:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| DataObserver: {get: function() { |
| return DataObserver; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__jsonpatch__, |
| $___46__46__47__46__46__47_mixins_47_localHooks__, |
| $___46__46__47__46__46__47_helpers_47_object__, |
| $__utils__; |
| var jsonpatch = ($__jsonpatch__ = _dereq_("jsonpatch"), $__jsonpatch__ && $__jsonpatch__.__esModule && $__jsonpatch__ || {default: $__jsonpatch__}).default; |
| var localHooks = ($___46__46__47__46__46__47_mixins_47_localHooks__ = _dereq_("../../mixins/localHooks"), $___46__46__47__46__46__47_mixins_47_localHooks__ && $___46__46__47__46__46__47_mixins_47_localHooks__.__esModule && $___46__46__47__46__46__47_mixins_47_localHooks__ || {default: $___46__46__47__46__46__47_mixins_47_localHooks__}).localHooks; |
| var mixin = ($___46__46__47__46__46__47_helpers_47_object__ = _dereq_("../../helpers/object"), $___46__46__47__46__46__47_helpers_47_object__ && $___46__46__47__46__46__47_helpers_47_object__.__esModule && $___46__46__47__46__46__47_helpers_47_object__ || {default: $___46__46__47__46__46__47_helpers_47_object__}).mixin; |
| var cleanPatches = ($__utils__ = _dereq_("utils"), $__utils__ && $__utils__.__esModule && $__utils__ || {default: $__utils__}).cleanPatches; |
| var DataObserver = function DataObserver(observedData) { |
| this.observedData = null; |
| this.observer = null; |
| this.paused = false; |
| this.setObservedData(observedData); |
| }; |
| ($traceurRuntime.createClass)(DataObserver, { |
| setObservedData: function(observedData) { |
| var $__4 = this; |
| if (this.observer) { |
| jsonpatch.unobserve(this.observedData, this.observer); |
| } |
| this.observedData = observedData; |
| this.observer = jsonpatch.observe(this.observedData, (function(patches) { |
| return $__4.onChange(patches); |
| })); |
| }, |
| isPaused: function() { |
| return this.paused; |
| }, |
| pause: function() { |
| this.paused = true; |
| }, |
| resume: function() { |
| this.paused = false; |
| }, |
| onChange: function(patches) { |
| this.runLocalHooks('change', cleanPatches(patches)); |
| }, |
| destroy: function() { |
| jsonpatch.unobserve(this.observedData, this.observer); |
| this.observedData = null; |
| this.observer = null; |
| } |
| }, {}); |
| mixin(DataObserver, localHooks); |
| ; |
| |
| //# |
| },{"../../helpers/object":53,"../../mixins/localHooks":57,"jsonpatch":"jsonpatch","utils":100}],99:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| ObserveChanges: {get: function() { |
| return ObserveChanges; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__95_base__, |
| $__jsonpatch__, |
| $__dataObserver__, |
| $___46__46__47__46__46__47_helpers_47_array__, |
| $___46__46__47__46__46__47_plugins__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var BasePlugin = ($___46__46__47__95_base__ = _dereq_("_base"), $___46__46__47__95_base__ && $___46__46__47__95_base__.__esModule && $___46__46__47__95_base__ || {default: $___46__46__47__95_base__}).default; |
| var jsonpatch = ($__jsonpatch__ = _dereq_("jsonpatch"), $__jsonpatch__ && $__jsonpatch__.__esModule && $__jsonpatch__ || {default: $__jsonpatch__}).default; |
| var DataObserver = ($__dataObserver__ = _dereq_("dataObserver"), $__dataObserver__ && $__dataObserver__.__esModule && $__dataObserver__ || {default: $__dataObserver__}).DataObserver; |
| var arrayEach = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}).arrayEach; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| Handsontable.hooks.register('afterChangesObserved'); |
| var ObserveChanges = function ObserveChanges(hotInstance) { |
| $traceurRuntime.superConstructor($ObserveChanges).call(this, hotInstance); |
| this.observer = null; |
| }; |
| var $ObserveChanges = ObserveChanges; |
| ($traceurRuntime.createClass)(ObserveChanges, { |
| isEnabled: function() { |
| return this.hot.getSettings().observeChanges; |
| }, |
| enablePlugin: function() { |
| var $__6 = this; |
| if (this.enabled) { |
| return; |
| } |
| if (!this.observer) { |
| this.observer = new DataObserver(this.hot.getSourceData()); |
| this._exposePublicApi(); |
| } |
| this.observer.addLocalHook('change', (function(patches) { |
| return $__6.onDataChange(patches); |
| })); |
| this.addHook('afterCreateRow', (function() { |
| return $__6.onAfterTableAlter(); |
| })); |
| this.addHook('afterRemoveRow', (function() { |
| return $__6.onAfterTableAlter(); |
| })); |
| this.addHook('afterCreateCol', (function() { |
| return $__6.onAfterTableAlter(); |
| })); |
| this.addHook('afterRemoveCol', (function() { |
| return $__6.onAfterTableAlter(); |
| })); |
| this.addHook('afterChange', (function(changes, source) { |
| return $__6.onAfterTableAlter(source); |
| })); |
| this.addHook('afterLoadData', (function(firstRun) { |
| return $__6.onAfterLoadData(firstRun); |
| })); |
| $traceurRuntime.superGet(this, $ObserveChanges.prototype, "enablePlugin").call(this); |
| }, |
| disablePlugin: function() { |
| if (this.observer) { |
| this.observer.destroy(); |
| this.observer = null; |
| this._deletePublicApi(); |
| } |
| $traceurRuntime.superGet(this, $ObserveChanges.prototype, "disablePlugin").call(this); |
| }, |
| onDataChange: function(patches) { |
| var $__6 = this; |
| if (!this.observer.isPaused()) { |
| var actions = { |
| add: (function(patch) { |
| if (isNaN(patch.col)) { |
| $__6.hot.runHooks('afterCreateRow', patch.row); |
| } else { |
| $__6.hot.runHooks('afterCreateCol', patch.col); |
| } |
| }), |
| remove: (function(patch) { |
| if (isNaN(patch.col)) { |
| $__6.hot.runHooks('afterRemoveRow', patch.row, 1); |
| } else { |
| $__6.hot.runHooks('afterRemoveCol', patch.col, 1); |
| } |
| }), |
| replace: (function(patch) { |
| $__6.hot.runHooks('afterChange', [patch.row, patch.col, null, patch.value], 'external'); |
| }) |
| }; |
| arrayEach(patches, (function(patch) { |
| if (actions[patch.op]) { |
| actions[patch.op](patch); |
| } |
| })); |
| this.hot.render(); |
| } |
| this.hot.runHooks('afterChangesObserved'); |
| }, |
| onAfterTableAlter: function(source) { |
| var $__6 = this; |
| if (source !== 'loadData') { |
| this.observer.pause(); |
| this.hot.addHookOnce('afterChangesObserved', (function() { |
| return $__6.observer.resume(); |
| })); |
| } |
| }, |
| onAfterLoadData: function(firstRun) { |
| if (!firstRun) { |
| this.observer.setObservedData(this.hot.getSourceData()); |
| } |
| }, |
| destroy: function() { |
| if (this.observer) { |
| this.observer.destroy(); |
| this._deletePublicApi(); |
| } |
| $traceurRuntime.superGet(this, $ObserveChanges.prototype, "destroy").call(this); |
| }, |
| _exposePublicApi: function() { |
| var $__6 = this; |
| var hot = this.hot; |
| hot.pauseObservingChanges = (function() { |
| return $__6.observer.pause(); |
| }); |
| hot.resumeObservingChanges = (function() { |
| return $__6.observer.resume(); |
| }); |
| hot.isPausedObservingChanges = (function() { |
| return $__6.observer.isPaused(); |
| }); |
| }, |
| _deletePublicApi: function() { |
| var hot = this.hot; |
| delete hot.pauseObservingChanges; |
| delete hot.resumeObservingChanges; |
| delete hot.isPausedObservingChanges; |
| } |
| }, {}, BasePlugin); |
| ; |
| registerPlugin('observeChanges', ObserveChanges); |
| |
| //# |
| },{"_base":61,"browser":24,"dataObserver":98,"helpers/array":43,"jsonpatch":"jsonpatch","plugins":60}],100:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| cleanPatches: {get: function() { |
| return cleanPatches; |
| }}, |
| parsePath: {get: function() { |
| return parsePath; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_helpers_47_array__; |
| var $__0 = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("../../helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}), |
| arrayFilter = $__0.arrayFilter, |
| arrayMap = $__0.arrayMap; |
| function cleanPatches(patches) { |
| var newOrRemovedColumns = []; |
| patches = arrayFilter(patches, (function(patch) { |
| if (/[/]length/ig.test(patch.path)) { |
| return false; |
| } |
| if (!parsePath(patch.path)) { |
| return false; |
| } |
| return true; |
| })); |
| patches = arrayMap(patches, (function(patch) { |
| var coords = parsePath(patch.path); |
| patch.row = coords.row; |
| patch.col = coords.col; |
| return patch; |
| })); |
| patches = arrayFilter(patches, function(patch) { |
| if (['add', 'remove'].indexOf(patch.op) !== -1 && !isNaN(patch.col)) { |
| if (newOrRemovedColumns.indexOf(patch.col) !== -1) { |
| return false; |
| } |
| newOrRemovedColumns.push(patch.col); |
| } |
| return true; |
| }); |
| newOrRemovedColumns.length = 0; |
| return patches; |
| } |
| function parsePath(path) { |
| var match = path.match(/^\/(\d+)\/?(.*)?$/); |
| if (!match) { |
| return null; |
| } |
| var $__1 = match, |
| row = $__1[1], |
| column = $__1[2]; |
| return { |
| row: parseInt(row, 10), |
| col: /^\d*$/.test(column) ? parseInt(column, 10) : column |
| }; |
| } |
| |
| //# |
| },{"../../helpers/array":43}],101:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| HandsontablePersistentState: {get: function() { |
| return HandsontablePersistentState; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_plugins__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| ; |
| function Storage(prefix) { |
| var savedKeys; |
| var saveSavedKeys = function() { |
| window.localStorage[prefix + '__' + 'persistentStateKeys'] = JSON.stringify(savedKeys); |
| }; |
| var loadSavedKeys = function() { |
| var keysJSON = window.localStorage[prefix + '__' + 'persistentStateKeys']; |
| var keys = typeof keysJSON == 'string' ? JSON.parse(keysJSON) : void 0; |
| savedKeys = keys ? keys : []; |
| }; |
| var clearSavedKeys = function() { |
| savedKeys = []; |
| saveSavedKeys(); |
| }; |
| loadSavedKeys(); |
| this.saveValue = function(key, value) { |
| window.localStorage[prefix + '_' + key] = JSON.stringify(value); |
| if (savedKeys.indexOf(key) == -1) { |
| savedKeys.push(key); |
| saveSavedKeys(); |
| } |
| }; |
| this.loadValue = function(key, defaultValue) { |
| key = typeof key === 'undefined' ? defaultValue : key; |
| var value = window.localStorage[prefix + '_' + key]; |
| return typeof value == 'undefined' ? void 0 : JSON.parse(value); |
| }; |
| this.reset = function(key) { |
| window.localStorage.removeItem(prefix + '_' + key); |
| }; |
| this.resetAll = function() { |
| for (var index = 0; index < savedKeys.length; index++) { |
| window.localStorage.removeItem(prefix + '_' + savedKeys[index]); |
| } |
| clearSavedKeys(); |
| }; |
| } |
| function HandsontablePersistentState() { |
| var plugin = this; |
| this.init = function() { |
| var instance = this, |
| pluginSettings = instance.getSettings().persistentState; |
| plugin.enabled = !!(pluginSettings); |
| if (!plugin.enabled) { |
| removeHooks.call(instance); |
| return; |
| } |
| if (!instance.storage) { |
| instance.storage = new Storage(instance.rootElement.id); |
| } |
| instance.resetState = plugin.resetValue; |
| addHooks.call(instance); |
| }; |
| this.saveValue = function(key, value) { |
| var instance = this; |
| instance.storage.saveValue(key, value); |
| }; |
| this.loadValue = function(key, saveTo) { |
| var instance = this; |
| saveTo.value = instance.storage.loadValue(key); |
| }; |
| this.resetValue = function(key) { |
| var instance = this; |
| if (typeof key === 'undefined') { |
| instance.storage.resetAll(); |
| } else { |
| instance.storage.reset(key); |
| } |
| }; |
| var hooks = { |
| persistentStateSave: plugin.saveValue, |
| persistentStateLoad: plugin.loadValue, |
| persistentStateReset: plugin.resetValue |
| }; |
| for (var hookName in hooks) { |
| if (hooks.hasOwnProperty(hookName)) { |
| Handsontable.hooks.register(hookName); |
| } |
| } |
| function addHooks() { |
| var instance = this; |
| for (var hookName in hooks) { |
| if (hooks.hasOwnProperty(hookName)) { |
| instance.addHook(hookName, hooks[hookName]); |
| } |
| } |
| } |
| function removeHooks() { |
| var instance = this; |
| for (var hookName in hooks) { |
| if (hooks.hasOwnProperty(hookName)) { |
| instance.removeHook(hookName, hooks[hookName]); |
| } |
| } |
| } |
| } |
| var htPersistentState = new HandsontablePersistentState(); |
| Handsontable.hooks.add('beforeInit', htPersistentState.init); |
| Handsontable.hooks.add('afterUpdateSettings', htPersistentState.init); |
| |
| //# |
| },{"browser":24,"plugins":60}],102:[function(_dereq_,module,exports){ |
| "use strict"; |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__46__46__47_renderers__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__1.addClass, |
| removeClass = $__1.removeClass; |
| var $__2 = ($___46__46__47__46__46__47_renderers__ = _dereq_("renderers"), $___46__46__47__46__46__47_renderers__ && $___46__46__47__46__46__47_renderers__.__esModule && $___46__46__47__46__46__47_renderers__ || {default: $___46__46__47__46__46__47_renderers__}), |
| registerRenderer = $__2.registerRenderer, |
| getRenderer = $__2.getRenderer; |
| Handsontable.Search = function Search(instance) { |
| this.query = function(queryStr, callback, queryMethod) { |
| var rowCount = instance.countRows(); |
| var colCount = instance.countCols(); |
| var queryResult = []; |
| if (!callback) { |
| callback = Handsontable.Search.global.getDefaultCallback(); |
| } |
| if (!queryMethod) { |
| queryMethod = Handsontable.Search.global.getDefaultQueryMethod(); |
| } |
| for (var rowIndex = 0; rowIndex < rowCount; rowIndex++) { |
| for (var colIndex = 0; colIndex < colCount; colIndex++) { |
| var cellData = instance.getDataAtCell(rowIndex, colIndex); |
| var cellProperties = instance.getCellMeta(rowIndex, colIndex); |
| var cellCallback = cellProperties.search.callback || callback; |
| var cellQueryMethod = cellProperties.search.queryMethod || queryMethod; |
| var testResult = cellQueryMethod(queryStr, cellData); |
| if (testResult) { |
| var singleResult = { |
| row: rowIndex, |
| col: colIndex, |
| data: cellData |
| }; |
| queryResult.push(singleResult); |
| } |
| if (cellCallback) { |
| cellCallback(instance, rowIndex, colIndex, cellData, testResult); |
| } |
| } |
| } |
| return queryResult; |
| }; |
| }; |
| Handsontable.Search.DEFAULT_CALLBACK = function(instance, row, col, data, testResult) { |
| instance.getCellMeta(row, col).isSearchResult = testResult; |
| }; |
| Handsontable.Search.DEFAULT_QUERY_METHOD = function(query, value) { |
| if (typeof query == 'undefined' || query == null || !query.toLowerCase || query.length === 0) { |
| return false; |
| } |
| if (typeof value == 'undefined' || value == null) { |
| return false; |
| } |
| return value.toString().toLowerCase().indexOf(query.toLowerCase()) != -1; |
| }; |
| Handsontable.Search.DEFAULT_SEARCH_RESULT_CLASS = 'htSearchResult'; |
| Handsontable.Search.global = (function() { |
| var defaultCallback = Handsontable.Search.DEFAULT_CALLBACK; |
| var defaultQueryMethod = Handsontable.Search.DEFAULT_QUERY_METHOD; |
| var defaultSearchResultClass = Handsontable.Search.DEFAULT_SEARCH_RESULT_CLASS; |
| return { |
| getDefaultCallback: function() { |
| return defaultCallback; |
| }, |
| setDefaultCallback: function(newDefaultCallback) { |
| defaultCallback = newDefaultCallback; |
| }, |
| getDefaultQueryMethod: function() { |
| return defaultQueryMethod; |
| }, |
| setDefaultQueryMethod: function(newDefaultQueryMethod) { |
| defaultQueryMethod = newDefaultQueryMethod; |
| }, |
| getDefaultSearchResultClass: function() { |
| return defaultSearchResultClass; |
| }, |
| setDefaultSearchResultClass: function(newSearchResultClass) { |
| defaultSearchResultClass = newSearchResultClass; |
| } |
| }; |
| })(); |
| Handsontable.SearchCellDecorator = function(instance, TD, row, col, prop, value, cellProperties) { |
| var searchResultClass = (cellProperties.search !== null && typeof cellProperties.search == 'object' && cellProperties.search.searchResultClass) || Handsontable.Search.global.getDefaultSearchResultClass(); |
| if (cellProperties.isSearchResult) { |
| addClass(TD, searchResultClass); |
| } else { |
| removeClass(TD, searchResultClass); |
| } |
| }; |
| var originalBaseRenderer = getRenderer('base'); |
| registerRenderer('base', function(instance, TD, row, col, prop, value, cellProperties) { |
| originalBaseRenderer.apply(this, arguments); |
| Handsontable.SearchCellDecorator.apply(this, arguments); |
| }); |
| function init() { |
| var instance = this; |
| var pluginEnabled = !!instance.getSettings().search; |
| if (pluginEnabled) { |
| instance.search = new Handsontable.Search(instance); |
| } else { |
| delete instance.search; |
| } |
| } |
| Handsontable.hooks.add('afterInit', init); |
| Handsontable.hooks.add('afterUpdateSettings', init); |
| |
| //# |
| },{"browser":24,"helpers/dom/element":47,"renderers":105}],103:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| TouchScroll: {get: function() { |
| return TouchScroll; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47__95_base__, |
| $___46__46__47__46__46__47_plugins__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47__46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47__46__46__47_helpers_47_dom_47_element__ && $___46__46__47__46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__1.addClass, |
| removeClass = $__1.removeClass; |
| var BasePlugin = ($___46__46__47__95_base__ = _dereq_("_base"), $___46__46__47__95_base__ && $___46__46__47__95_base__.__esModule && $___46__46__47__95_base__ || {default: $___46__46__47__95_base__}).default; |
| var registerPlugin = ($___46__46__47__46__46__47_plugins__ = _dereq_("plugins"), $___46__46__47__46__46__47_plugins__ && $___46__46__47__46__46__47_plugins__.__esModule && $___46__46__47__46__46__47_plugins__ || {default: $___46__46__47__46__46__47_plugins__}).registerPlugin; |
| var TouchScroll = function TouchScroll(hotInstance) { |
| var $__4 = this; |
| $traceurRuntime.superConstructor($TouchScroll).call(this, hotInstance); |
| this.hot.addHook('afterInit', (function() { |
| return $__4.afterInit(); |
| })); |
| this.hot.addHook('afterUpdateSettings', (function() { |
| return $__4.onAfterUpdateSettings(); |
| })); |
| this.scrollbars = []; |
| this.clones = []; |
| }; |
| var $TouchScroll = TouchScroll; |
| ($traceurRuntime.createClass)(TouchScroll, { |
| afterInit: function() { |
| this.registerEvents(); |
| this.onAfterUpdateSettings(); |
| }, |
| onAfterUpdateSettings: function() { |
| var _this = this; |
| this.hot.addHookOnce('afterRender', function() { |
| var wtOverlays = _this.hot.view.wt.wtOverlays; |
| _this.scrollbars = []; |
| _this.scrollbars.push(wtOverlays.topOverlay); |
| if (wtOverlays.bottomOverlay.clone) { |
| _this.scrollbars.push(wtOverlays.bottomOverlay); |
| } |
| _this.scrollbars.push(wtOverlays.leftOverlay); |
| if (wtOverlays.topLeftCornerOverlay) { |
| _this.scrollbars.push(wtOverlays.topLeftCornerOverlay); |
| } |
| if (wtOverlays.bottomLeftCornerOverlay && wtOverlays.bottomLeftCornerOverlay.clone) { |
| _this.scrollbars.push(wtOverlays.bottomLeftCornerOverlay); |
| } |
| _this.clones = []; |
| if (wtOverlays.topOverlay.needFullRender) { |
| _this.clones.push(wtOverlays.topOverlay.clone.wtTable.holder.parentNode); |
| } |
| if (wtOverlays.bottomOverlay.needFullRender) { |
| _this.clones.push(wtOverlays.bottomOverlay.clone.wtTable.holder.parentNode); |
| } |
| if (wtOverlays.leftOverlay.needFullRender) { |
| _this.clones.push(wtOverlays.leftOverlay.clone.wtTable.holder.parentNode); |
| } |
| if (wtOverlays.topLeftCornerOverlay) { |
| _this.clones.push(wtOverlays.topLeftCornerOverlay.clone.wtTable.holder.parentNode); |
| } |
| if (wtOverlays.bottomLeftCornerOverlay && wtOverlays.bottomLeftCornerOverlay.clone) { |
| _this.clones.push(wtOverlays.bottomLeftCornerOverlay.clone.wtTable.holder.parentNode); |
| } |
| }); |
| }, |
| registerEvents: function() { |
| var $__4 = this; |
| this.hot.addHook('beforeTouchScroll', (function() { |
| return $__4.onBeforeTouchScroll(); |
| })); |
| this.hot.addHook('afterMomentumScroll', (function() { |
| return $__4.onAfterMomentumScroll(); |
| })); |
| }, |
| onBeforeTouchScroll: function() { |
| Handsontable.freezeOverlays = true; |
| for (var i = 0, |
| cloneCount = this.clones.length; i < cloneCount; i++) { |
| addClass(this.clones[i], 'hide-tween'); |
| } |
| }, |
| onAfterMomentumScroll: function() { |
| Handsontable.freezeOverlays = false; |
| var _that = this; |
| for (var i = 0, |
| cloneCount = this.clones.length; i < cloneCount; i++) { |
| removeClass(this.clones[i], 'hide-tween'); |
| } |
| for (var i$__6 = 0, |
| cloneCount$__7 = this.clones.length; i$__6 < cloneCount$__7; i$__6++) { |
| addClass(this.clones[i$__6], 'show-tween'); |
| } |
| setTimeout(function() { |
| for (var i = 0, |
| cloneCount = _that.clones.length; i < cloneCount; i++) { |
| removeClass(_that.clones[i], 'show-tween'); |
| } |
| }, 400); |
| for (var i$__8 = 0, |
| cloneCount$__9 = this.scrollbars.length; i$__8 < cloneCount$__9; i$__8++) { |
| this.scrollbars[i$__8].refresh(); |
| this.scrollbars[i$__8].resetFixedPosition(); |
| } |
| this.hot.view.wt.wtOverlays.syncScrollWithMaster(); |
| } |
| }, {}, BasePlugin); |
| ; |
| registerPlugin('touchScroll', TouchScroll); |
| |
| //# |
| },{"_base":61,"browser":24,"helpers/dom/element":47,"plugins":60}],104:[function(_dereq_,module,exports){ |
| "use strict"; |
| var $___46__46__47__46__46__47_browser__, |
| $___46__46__47__46__46__47_helpers_47_array__, |
| $___46__46__47__46__46__47_helpers_47_number__, |
| $___46__46__47__46__46__47_helpers_47_object__, |
| $___46__46__47__46__46__47_helpers_47_dom_47_event__; |
| var Handsontable = ($___46__46__47__46__46__47_browser__ = _dereq_("browser"), $___46__46__47__46__46__47_browser__ && $___46__46__47__46__46__47_browser__.__esModule && $___46__46__47__46__46__47_browser__ || {default: $___46__46__47__46__46__47_browser__}).default; |
| var arrayMap = ($___46__46__47__46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47__46__46__47_helpers_47_array__ && $___46__46__47__46__46__47_helpers_47_array__.__esModule && $___46__46__47__46__46__47_helpers_47_array__ || {default: $___46__46__47__46__46__47_helpers_47_array__}).arrayMap; |
| var rangeEach = ($___46__46__47__46__46__47_helpers_47_number__ = _dereq_("helpers/number"), $___46__46__47__46__46__47_helpers_47_number__ && $___46__46__47__46__46__47_helpers_47_number__.__esModule && $___46__46__47__46__46__47_helpers_47_number__ || {default: $___46__46__47__46__46__47_helpers_47_number__}).rangeEach; |
| var $__3 = ($___46__46__47__46__46__47_helpers_47_object__ = _dereq_("helpers/object"), $___46__46__47__46__46__47_helpers_47_object__ && $___46__46__47__46__46__47_helpers_47_object__.__esModule && $___46__46__47__46__46__47_helpers_47_object__ || {default: $___46__46__47__46__46__47_helpers_47_object__}), |
| inherit = $__3.inherit, |
| deepClone = $__3.deepClone; |
| var stopImmediatePropagation = ($___46__46__47__46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47__46__46__47_helpers_47_dom_47_event__ && $___46__46__47__46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47__46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47__46__46__47_helpers_47_dom_47_event__}).stopImmediatePropagation; |
| Handsontable.UndoRedo = function(instance) { |
| var plugin = this; |
| this.instance = instance; |
| this.doneActions = []; |
| this.undoneActions = []; |
| this.ignoreNewActions = false; |
| instance.addHook('afterChange', function(changes, origin) { |
| if (changes) { |
| var action = new Handsontable.UndoRedo.ChangeAction(changes); |
| plugin.done(action); |
| } |
| }); |
| instance.addHook('afterCreateRow', function(index, amount, createdAutomatically) { |
| if (createdAutomatically) { |
| return; |
| } |
| var action = new Handsontable.UndoRedo.CreateRowAction(index, amount); |
| plugin.done(action); |
| }); |
| instance.addHook('beforeRemoveRow', function(index, amount) { |
| var originalData = plugin.instance.getSourceData(); |
| index = (originalData.length + index) % originalData.length; |
| var removedData = originalData.slice(index, index + amount); |
| var action = new Handsontable.UndoRedo.RemoveRowAction(index, removedData); |
| plugin.done(action); |
| }); |
| instance.addHook('afterCreateCol', function(index, amount, createdAutomatically) { |
| if (createdAutomatically) { |
| return; |
| } |
| var action = new Handsontable.UndoRedo.CreateColumnAction(index, amount); |
| plugin.done(action); |
| }); |
| instance.addHook('beforeRemoveCol', function(index, amount) { |
| var originalData = plugin.instance.getData(); |
| index = (plugin.instance.countCols() + index) % plugin.instance.countCols(); |
| var removedData = []; |
| var headers = []; |
| var indexes = []; |
| rangeEach(0, originalData.length - 1, (function(i) { |
| removedData[i] = originalData[i].slice(index, index + amount); |
| })); |
| rangeEach(0, amount - 1, (function(i) { |
| indexes.push(instance.runHooks('modifyCol', index + i)); |
| })); |
| if (Array.isArray(instance.getSettings().colHeaders)) { |
| rangeEach(0, amount - 1, (function(i) { |
| headers.push(instance.getSettings().colHeaders[instance.runHooks('modifyCol', index + i)] || null); |
| })); |
| } |
| var manualColumnMovePlugin = plugin.instance.getPlugin('manualColumnMove'); |
| var action = new Handsontable.UndoRedo.RemoveColumnAction(indexes, removedData, headers, manualColumnMovePlugin ? manualColumnMovePlugin.columnPositions : []); |
| plugin.done(action); |
| }); |
| instance.addHook('beforeCellAlignment', function(stateBefore, range, type, alignment) { |
| var action = new Handsontable.UndoRedo.CellAlignmentAction(stateBefore, range, type, alignment); |
| plugin.done(action); |
| }); |
| instance.addHook('beforeFilter', function(formulaStacks) { |
| plugin.done(new Handsontable.UndoRedo.FiltersAction(formulaStacks)); |
| }); |
| }; |
| Handsontable.UndoRedo.prototype.done = function(action) { |
| if (!this.ignoreNewActions) { |
| this.doneActions.push(action); |
| this.undoneActions.length = 0; |
| } |
| }; |
| Handsontable.UndoRedo.prototype.undo = function() { |
| if (this.isUndoAvailable()) { |
| var action = this.doneActions.pop(); |
| this.ignoreNewActions = true; |
| var that = this; |
| action.undo(this.instance, function() { |
| that.ignoreNewActions = false; |
| that.undoneActions.push(action); |
| }); |
| } |
| }; |
| Handsontable.UndoRedo.prototype.redo = function() { |
| if (this.isRedoAvailable()) { |
| var action = this.undoneActions.pop(); |
| this.ignoreNewActions = true; |
| var that = this; |
| action.redo(this.instance, function() { |
| that.ignoreNewActions = false; |
| that.doneActions.push(action); |
| }); |
| } |
| }; |
| Handsontable.UndoRedo.prototype.isUndoAvailable = function() { |
| return this.doneActions.length > 0; |
| }; |
| Handsontable.UndoRedo.prototype.isRedoAvailable = function() { |
| return this.undoneActions.length > 0; |
| }; |
| Handsontable.UndoRedo.prototype.clear = function() { |
| this.doneActions.length = 0; |
| this.undoneActions.length = 0; |
| }; |
| Handsontable.UndoRedo.Action = function() {}; |
| Handsontable.UndoRedo.Action.prototype.undo = function() {}; |
| Handsontable.UndoRedo.Action.prototype.redo = function() {}; |
| Handsontable.UndoRedo.ChangeAction = function(changes) { |
| this.changes = changes; |
| }; |
| inherit(Handsontable.UndoRedo.ChangeAction, Handsontable.UndoRedo.Action); |
| Handsontable.UndoRedo.ChangeAction.prototype.undo = function(instance, undoneCallback) { |
| var data = deepClone(this.changes), |
| emptyRowsAtTheEnd = instance.countEmptyRows(true), |
| emptyColsAtTheEnd = instance.countEmptyCols(true); |
| for (var i = 0, |
| len = data.length; i < len; i++) { |
| data[i].splice(3, 1); |
| } |
| instance.addHookOnce('afterChange', undoneCallback); |
| instance.setDataAtRowProp(data, null, null, 'undo'); |
| for (var i = 0, |
| len = data.length; i < len; i++) { |
| if (instance.getSettings().minSpareRows && data[i][0] + 1 + instance.getSettings().minSpareRows === instance.countRows() && emptyRowsAtTheEnd == instance.getSettings().minSpareRows) { |
| instance.alter('remove_row', parseInt(data[i][0] + 1, 10), instance.getSettings().minSpareRows); |
| instance.undoRedo.doneActions.pop(); |
| } |
| if (instance.getSettings().minSpareCols && data[i][1] + 1 + instance.getSettings().minSpareCols === instance.countCols() && emptyColsAtTheEnd == instance.getSettings().minSpareCols) { |
| instance.alter('remove_col', parseInt(data[i][1] + 1, 10), instance.getSettings().minSpareCols); |
| instance.undoRedo.doneActions.pop(); |
| } |
| } |
| }; |
| Handsontable.UndoRedo.ChangeAction.prototype.redo = function(instance, onFinishCallback) { |
| var data = deepClone(this.changes); |
| for (var i = 0, |
| len = data.length; i < len; i++) { |
| data[i].splice(2, 1); |
| } |
| instance.addHookOnce('afterChange', onFinishCallback); |
| instance.setDataAtRowProp(data, null, null, 'redo'); |
| }; |
| Handsontable.UndoRedo.CreateRowAction = function(index, amount) { |
| this.index = index; |
| this.amount = amount; |
| }; |
| inherit(Handsontable.UndoRedo.CreateRowAction, Handsontable.UndoRedo.Action); |
| Handsontable.UndoRedo.CreateRowAction.prototype.undo = function(instance, undoneCallback) { |
| var rowCount = instance.countRows(), |
| minSpareRows = instance.getSettings().minSpareRows; |
| if (this.index >= rowCount && this.index - minSpareRows < rowCount) { |
| this.index -= minSpareRows; |
| } |
| instance.addHookOnce('afterRemoveRow', undoneCallback); |
| instance.alter('remove_row', this.index, this.amount); |
| }; |
| Handsontable.UndoRedo.CreateRowAction.prototype.redo = function(instance, redoneCallback) { |
| instance.addHookOnce('afterCreateRow', redoneCallback); |
| instance.alter('insert_row', this.index + 1, this.amount); |
| }; |
| Handsontable.UndoRedo.RemoveRowAction = function(index, data) { |
| this.index = index; |
| this.data = data; |
| }; |
| inherit(Handsontable.UndoRedo.RemoveRowAction, Handsontable.UndoRedo.Action); |
| Handsontable.UndoRedo.RemoveRowAction.prototype.undo = function(instance, undoneCallback) { |
| var spliceArgs = [this.index, 0]; |
| Array.prototype.push.apply(spliceArgs, this.data); |
| Array.prototype.splice.apply(instance.getSourceData(), spliceArgs); |
| instance.addHookOnce('afterRender', undoneCallback); |
| instance.render(); |
| }; |
| Handsontable.UndoRedo.RemoveRowAction.prototype.redo = function(instance, redoneCallback) { |
| instance.addHookOnce('afterRemoveRow', redoneCallback); |
| instance.alter('remove_row', this.index, this.data.length); |
| }; |
| Handsontable.UndoRedo.CreateColumnAction = function(index, amount) { |
| this.index = index; |
| this.amount = amount; |
| }; |
| inherit(Handsontable.UndoRedo.CreateColumnAction, Handsontable.UndoRedo.Action); |
| Handsontable.UndoRedo.CreateColumnAction.prototype.undo = function(instance, undoneCallback) { |
| instance.addHookOnce('afterRemoveCol', undoneCallback); |
| instance.alter('remove_col', this.index, this.amount); |
| }; |
| Handsontable.UndoRedo.CreateColumnAction.prototype.redo = function(instance, redoneCallback) { |
| instance.addHookOnce('afterCreateCol', redoneCallback); |
| instance.alter('insert_col', this.index + 1, this.amount); |
| }; |
| Handsontable.UndoRedo.CellAlignmentAction = function(stateBefore, range, type, alignment) { |
| this.stateBefore = stateBefore; |
| this.range = range; |
| this.type = type; |
| this.alignment = alignment; |
| }; |
| Handsontable.UndoRedo.CellAlignmentAction.prototype.undo = function(instance, undoneCallback) { |
| if (!instance.getPlugin('contextMenu').isEnabled()) { |
| return; |
| } |
| for (var row = this.range.from.row; row <= this.range.to.row; row++) { |
| for (var col = this.range.from.col; col <= this.range.to.col; col++) { |
| instance.setCellMeta(row, col, 'className', this.stateBefore[row][col] || ' htLeft'); |
| } |
| } |
| instance.addHookOnce('afterRender', undoneCallback); |
| instance.render(); |
| }; |
| Handsontable.UndoRedo.CellAlignmentAction.prototype.redo = function(instance, undoneCallback) { |
| if (!instance.getPlugin('contextMenu').isEnabled()) { |
| return; |
| } |
| instance.selectCell(this.range.from.row, this.range.from.col, this.range.to.row, this.range.to.col); |
| instance.getPlugin('contextMenu').executeCommand('alignment:' + this.alignment.replace('ht', '').toLowerCase()); |
| instance.addHookOnce('afterRender', undoneCallback); |
| instance.render(); |
| }; |
| Handsontable.UndoRedo.RemoveColumnAction = function(indexes, data, headers, columnPositions) { |
| this.indexes = indexes; |
| this.data = data; |
| this.amount = this.data[0].length; |
| this.headers = headers; |
| this.columnPositions = columnPositions.slice(0); |
| }; |
| inherit(Handsontable.UndoRedo.RemoveColumnAction, Handsontable.UndoRedo.Action); |
| Handsontable.UndoRedo.RemoveColumnAction.prototype.undo = function(instance, undoneCallback) { |
| var $__5 = this; |
| var row; |
| var ascendingIndexes = this.indexes.slice(0).sort(); |
| var sortByIndexes = (function(elem, j, arr) { |
| return arr[$__5.indexes.indexOf(ascendingIndexes[j])]; |
| }); |
| var sortedData = []; |
| rangeEach(0, this.data.length - 1, (function(i) { |
| sortedData[i] = arrayMap($__5.data[i], sortByIndexes); |
| })); |
| var sortedHeaders = []; |
| sortedHeaders = arrayMap(this.headers, sortByIndexes); |
| rangeEach(0, this.data.length - 1, (function(i) { |
| row = instance.getSourceDataAtRow(i); |
| rangeEach(0, ascendingIndexes.length - 1, (function(j) { |
| row.splice(ascendingIndexes[j], 0, sortedData[i][j]); |
| })); |
| })); |
| if (typeof this.headers != 'undefined') { |
| rangeEach(0, sortedHeaders.length - 1, (function(j) { |
| instance.getSettings().colHeaders.splice(ascendingIndexes[j], 0, sortedHeaders[j]); |
| })); |
| } |
| if (instance.getPlugin('manualColumnMove')) { |
| instance.getPlugin('manualColumnMove').columnPositions = this.columnPositions; |
| } |
| instance.addHookOnce('afterRender', undoneCallback); |
| instance.render(); |
| }; |
| Handsontable.UndoRedo.RemoveColumnAction.prototype.redo = function(instance, redoneCallback) { |
| instance.addHookOnce('afterRemoveCol', redoneCallback); |
| instance.alter('remove_col', instance.runHooks('unmodifyCol', this.indexes[0]), this.amount); |
| }; |
| Handsontable.UndoRedo.FiltersAction = function(formulaStacks) { |
| this.formulaStacks = formulaStacks; |
| }; |
| inherit(Handsontable.UndoRedo.FiltersAction, Handsontable.UndoRedo.Action); |
| Handsontable.UndoRedo.FiltersAction.prototype.undo = function(instance, undoneCallback) { |
| var filters = instance.getPlugin('filters'); |
| instance.addHookOnce('afterRender', undoneCallback); |
| filters.formulaCollection.importAllFormulas(this.formulaStacks.slice(0, this.formulaStacks.length - 1)); |
| filters.filter(); |
| }; |
| Handsontable.UndoRedo.FiltersAction.prototype.redo = function(instance, redoneCallback) { |
| var filters = instance.getPlugin('filters'); |
| instance.addHookOnce('afterRender', redoneCallback); |
| filters.formulaCollection.importAllFormulas(this.formulaStacks); |
| filters.filter(); |
| }; |
| function init() { |
| var instance = this; |
| var pluginEnabled = typeof instance.getSettings().undo == 'undefined' || instance.getSettings().undo; |
| if (pluginEnabled) { |
| if (!instance.undoRedo) { |
| instance.undoRedo = new Handsontable.UndoRedo(instance); |
| exposeUndoRedoMethods(instance); |
| instance.addHook('beforeKeyDown', onBeforeKeyDown); |
| instance.addHook('afterChange', onAfterChange); |
| } |
| } else { |
| if (instance.undoRedo) { |
| delete instance.undoRedo; |
| removeExposedUndoRedoMethods(instance); |
| instance.removeHook('beforeKeyDown', onBeforeKeyDown); |
| instance.removeHook('afterChange', onAfterChange); |
| } |
| } |
| } |
| function onBeforeKeyDown(event) { |
| var instance = this; |
| var ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey; |
| if (ctrlDown) { |
| if (event.keyCode === 89 || (event.shiftKey && event.keyCode === 90)) { |
| instance.undoRedo.redo(); |
| stopImmediatePropagation(event); |
| } else if (event.keyCode === 90) { |
| instance.undoRedo.undo(); |
| stopImmediatePropagation(event); |
| } |
| } |
| } |
| function onAfterChange(changes, source) { |
| var instance = this; |
| if (source == 'loadData') { |
| return instance.undoRedo.clear(); |
| } |
| } |
| function exposeUndoRedoMethods(instance) { |
| instance.undo = function() { |
| return instance.undoRedo.undo(); |
| }; |
| instance.redo = function() { |
| return instance.undoRedo.redo(); |
| }; |
| instance.isUndoAvailable = function() { |
| return instance.undoRedo.isUndoAvailable(); |
| }; |
| instance.isRedoAvailable = function() { |
| return instance.undoRedo.isRedoAvailable(); |
| }; |
| instance.clearUndo = function() { |
| return instance.undoRedo.clear(); |
| }; |
| } |
| function removeExposedUndoRedoMethods(instance) { |
| delete instance.undo; |
| delete instance.redo; |
| delete instance.isUndoAvailable; |
| delete instance.isRedoAvailable; |
| delete instance.clearUndo; |
| } |
| Handsontable.hooks.add('afterInit', init); |
| Handsontable.hooks.add('afterUpdateSettings', init); |
| |
| //# |
| },{"browser":24,"helpers/array":43,"helpers/dom/event":48,"helpers/number":52,"helpers/object":53}],105:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| registerRenderer: {get: function() { |
| return registerRenderer; |
| }}, |
| getRenderer: {get: function() { |
| return getRenderer; |
| }}, |
| hasRenderer: {get: function() { |
| return hasRenderer; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__browser__, |
| $__helpers_47_string__; |
| var Handsontable = ($__browser__ = _dereq_("browser"), $__browser__ && $__browser__.__esModule && $__browser__ || {default: $__browser__}).default; |
| var toUpperCaseFirst = ($__helpers_47_string__ = _dereq_("helpers/string"), $__helpers_47_string__ && $__helpers_47_string__.__esModule && $__helpers_47_string__ || {default: $__helpers_47_string__}).toUpperCaseFirst; |
| var registeredRenderers = {}; |
| Handsontable.renderers = Handsontable.renderers || {}; |
| Handsontable.renderers.registerRenderer = registerRenderer; |
| Handsontable.renderers.getRenderer = getRenderer; |
| function registerRenderer(rendererName, rendererFunction) { |
| var registerName; |
| registeredRenderers[rendererName] = rendererFunction; |
| registerName = toUpperCaseFirst(rendererName) + 'Renderer'; |
| Handsontable.renderers[registerName] = rendererFunction; |
| Handsontable[registerName] = rendererFunction; |
| if (rendererName === 'base') { |
| Handsontable.renderers.cellDecorator = rendererFunction; |
| } |
| } |
| function getRenderer(rendererName) { |
| if (typeof rendererName == 'function') { |
| return rendererName; |
| } |
| if (typeof rendererName != 'string') { |
| throw Error('Only strings and functions can be passed as "renderer" parameter'); |
| } |
| if (!(rendererName in registeredRenderers)) { |
| throw Error('No editor registered under name "' + rendererName + '"'); |
| } |
| return registeredRenderers[rendererName]; |
| } |
| function hasRenderer(rendererName) { |
| return rendererName in registeredRenderers; |
| } |
| ; |
| |
| //# |
| },{"browser":24,"helpers/string":55}],106:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| cellDecorator: {get: function() { |
| return cellDecorator; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47_renderers__; |
| var $__0 = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__0.addClass, |
| removeClass = $__0.removeClass; |
| var registerRenderer = ($___46__46__47_renderers__ = _dereq_("renderers"), $___46__46__47_renderers__ && $___46__46__47_renderers__.__esModule && $___46__46__47_renderers__ || {default: $___46__46__47_renderers__}).registerRenderer; |
| function cellDecorator(instance, TD, row, col, prop, value, cellProperties) { |
| if (cellProperties.className) { |
| if (TD.className) { |
| TD.className = TD.className + ' ' + cellProperties.className; |
| } else { |
| TD.className = cellProperties.className; |
| } |
| } |
| if (cellProperties.readOnly) { |
| addClass(TD, cellProperties.readOnlyCellClassName); |
| } |
| if (cellProperties.valid === false && cellProperties.invalidCellClassName) { |
| addClass(TD, cellProperties.invalidCellClassName); |
| } else { |
| removeClass(TD, cellProperties.invalidCellClassName); |
| } |
| if (cellProperties.wordWrap === false && cellProperties.noWordWrapClassName) { |
| addClass(TD, cellProperties.noWordWrapClassName); |
| } |
| if (!value && cellProperties.placeholder) { |
| addClass(TD, cellProperties.placeholderCellClassName); |
| } |
| } |
| ; |
| registerRenderer('base', cellDecorator); |
| |
| //# |
| },{"helpers/dom/element":47,"renderers":105}],107:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| autocompleteRenderer: {get: function() { |
| return autocompleteRenderer; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47_eventManager__, |
| $___46__46__47_renderers__, |
| $___46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__; |
| var $__0 = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__0.addClass, |
| hasClass = $__0.hasClass, |
| empty = $__0.empty; |
| var eventManagerObject = ($___46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47_eventManager__ && $___46__46__47_eventManager__.__esModule && $___46__46__47_eventManager__ || {default: $___46__46__47_eventManager__}).eventManager; |
| var $__2 = ($___46__46__47_renderers__ = _dereq_("renderers"), $___46__46__47_renderers__ && $___46__46__47_renderers__.__esModule && $___46__46__47_renderers__ || {default: $___46__46__47_renderers__}), |
| getRenderer = $__2.getRenderer, |
| registerRenderer = $__2.registerRenderer; |
| var WalkontableCellCoords = ($___46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ = _dereq_("3rdparty/walkontable/src/cell/coords"), $___46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ && $___46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__.__esModule && $___46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__ || {default: $___46__46__47_3rdparty_47_walkontable_47_src_47_cell_47_coords__}).WalkontableCellCoords; |
| var clonableWRAPPER = document.createElement('DIV'); |
| clonableWRAPPER.className = 'htAutocompleteWrapper'; |
| var clonableARROW = document.createElement('DIV'); |
| clonableARROW.className = 'htAutocompleteArrow'; |
| clonableARROW.appendChild(document.createTextNode(String.fromCharCode(9660))); |
| var wrapTdContentWithWrapper = function(TD, WRAPPER) { |
| WRAPPER.innerHTML = TD.innerHTML; |
| empty(TD); |
| TD.appendChild(WRAPPER); |
| }; |
| function autocompleteRenderer(instance, TD, row, col, prop, value, cellProperties) { |
| var WRAPPER = clonableWRAPPER.cloneNode(true); |
| var ARROW = clonableARROW.cloneNode(true); |
| getRenderer('text')(instance, TD, row, col, prop, value, cellProperties); |
| TD.appendChild(ARROW); |
| addClass(TD, 'htAutocomplete'); |
| if (!TD.firstChild) { |
| TD.appendChild(document.createTextNode(String.fromCharCode(160))); |
| } |
| if (!instance.acArrowListener) { |
| var eventManager = eventManagerObject(instance); |
| instance.acArrowListener = function(event) { |
| if (hasClass(event.target, 'htAutocompleteArrow')) { |
| instance.view.wt.getSetting('onCellDblClick', null, new WalkontableCellCoords(row, col), TD); |
| } |
| }; |
| eventManager.addEventListener(instance.rootElement, 'mousedown', instance.acArrowListener); |
| instance.addHookOnce('afterDestroy', function() { |
| eventManager.destroy(); |
| }); |
| } |
| } |
| ; |
| registerRenderer('autocomplete', autocompleteRenderer); |
| |
| //# |
| },{"3rdparty/walkontable/src/cell/coords":6,"eventManager":42,"helpers/dom/element":47,"renderers":105}],108:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| checkboxRenderer: {get: function() { |
| return checkboxRenderer; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47_helpers_47_string__, |
| $___46__46__47_eventManager__, |
| $___46__46__47_renderers__, |
| $___46__46__47_helpers_47_unicode__, |
| $___46__46__47_helpers_47_function__, |
| $___46__46__47_helpers_47_dom_47_event__; |
| var $__0 = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}), |
| empty = $__0.empty, |
| addClass = $__0.addClass, |
| hasClass = $__0.hasClass; |
| var equalsIgnoreCase = ($___46__46__47_helpers_47_string__ = _dereq_("helpers/string"), $___46__46__47_helpers_47_string__ && $___46__46__47_helpers_47_string__.__esModule && $___46__46__47_helpers_47_string__ || {default: $___46__46__47_helpers_47_string__}).equalsIgnoreCase; |
| var EventManager = ($___46__46__47_eventManager__ = _dereq_("eventManager"), $___46__46__47_eventManager__ && $___46__46__47_eventManager__.__esModule && $___46__46__47_eventManager__ || {default: $___46__46__47_eventManager__}).EventManager; |
| var $__3 = ($___46__46__47_renderers__ = _dereq_("renderers"), $___46__46__47_renderers__ && $___46__46__47_renderers__.__esModule && $___46__46__47_renderers__ || {default: $___46__46__47_renderers__}), |
| getRenderer = $__3.getRenderer, |
| registerRenderer = $__3.registerRenderer; |
| var isKey = ($___46__46__47_helpers_47_unicode__ = _dereq_("helpers/unicode"), $___46__46__47_helpers_47_unicode__ && $___46__46__47_helpers_47_unicode__.__esModule && $___46__46__47_helpers_47_unicode__ || {default: $___46__46__47_helpers_47_unicode__}).isKey; |
| var partial = ($___46__46__47_helpers_47_function__ = _dereq_("helpers/function"), $___46__46__47_helpers_47_function__ && $___46__46__47_helpers_47_function__.__esModule && $___46__46__47_helpers_47_function__ || {default: $___46__46__47_helpers_47_function__}).partial; |
| var $__6 = ($___46__46__47_helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $___46__46__47_helpers_47_dom_47_event__ && $___46__46__47_helpers_47_dom_47_event__.__esModule && $___46__46__47_helpers_47_dom_47_event__ || {default: $___46__46__47_helpers_47_dom_47_event__}), |
| stopImmediatePropagation = $__6.stopImmediatePropagation, |
| isImmediatePropagationStopped = $__6.isImmediatePropagationStopped; |
| var isListeningKeyDownEvent = new WeakMap(); |
| var isCheckboxListenerAdded = new WeakMap(); |
| var BAD_VALUE_CLASS = 'htBadValue'; |
| function checkboxRenderer(instance, TD, row, col, prop, value, cellProperties) { |
| getRenderer('base').apply(this, arguments); |
| var eventManager = registerEvents(instance); |
| var input = createInput(); |
| var labelOptions = cellProperties.label; |
| var badValue = false; |
| if (typeof cellProperties.checkedTemplate === 'undefined') { |
| cellProperties.checkedTemplate = true; |
| } |
| if (typeof cellProperties.uncheckedTemplate === 'undefined') { |
| cellProperties.uncheckedTemplate = false; |
| } |
| empty(TD); |
| if (value === cellProperties.checkedTemplate || equalsIgnoreCase(value, cellProperties.checkedTemplate)) { |
| input.checked = true; |
| } else if (value === cellProperties.uncheckedTemplate || equalsIgnoreCase(value, cellProperties.uncheckedTemplate)) { |
| input.checked = false; |
| } else if (value === null) { |
| addClass(input, 'noValue'); |
| } else { |
| input.style.display = 'none'; |
| addClass(input, BAD_VALUE_CLASS); |
| badValue = true; |
| } |
| input.setAttribute('data-row', row); |
| input.setAttribute('data-col', col); |
| if (!badValue && labelOptions) { |
| var labelText = ''; |
| if (labelOptions.value) { |
| labelText = typeof labelOptions.value === 'function' ? labelOptions.value.call(this, row, col, prop, value) : labelOptions.value; |
| } else if (labelOptions.property) { |
| labelText = instance.getDataAtRowProp(row, labelOptions.property); |
| } |
| var label = createLabel(labelText); |
| if (labelOptions.position === 'before') { |
| label.appendChild(input); |
| } else { |
| label.insertBefore(input, label.firstChild); |
| } |
| input = label; |
| } |
| TD.appendChild(input); |
| if (badValue) { |
| TD.appendChild(document.createTextNode('#bad-value#')); |
| } |
| if (!isListeningKeyDownEvent.has(instance)) { |
| isListeningKeyDownEvent.set(instance, true); |
| instance.addHook('beforeKeyDown', onBeforeKeyDown); |
| } |
| function onBeforeKeyDown(event) { |
| var toggleKeys = 'SPACE|ENTER'; |
| var switchOffKeys = 'DELETE|BACKSPACE'; |
| var isKeyCode = partial(isKey, event.keyCode); |
| if (isKeyCode((toggleKeys + "|" + switchOffKeys)) && !isImmediatePropagationStopped(event)) { |
| eachSelectedCheckboxCell(function() { |
| stopImmediatePropagation(event); |
| event.preventDefault(); |
| }); |
| } |
| if (isKeyCode(toggleKeys)) { |
| toggleSelected(); |
| } |
| if (isKeyCode(switchOffKeys)) { |
| toggleSelected(false); |
| } |
| } |
| function toggleSelected() { |
| var checked = arguments[0] !== (void 0) ? arguments[0] : null; |
| eachSelectedCheckboxCell(function(checkboxes) { |
| for (var i = 0, |
| len = checkboxes.length; i < len; i++) { |
| if (hasClass(checkboxes[i], BAD_VALUE_CLASS) && checked === null) { |
| return; |
| } |
| toggleCheckbox(checkboxes[i], checked); |
| } |
| }); |
| } |
| function toggleCheckbox(checkbox) { |
| var checked = arguments[1] !== (void 0) ? arguments[1] : null; |
| if (checked === null) { |
| checkbox.checked = !checkbox.checked; |
| } else { |
| checkbox.checked = checked; |
| } |
| eventManager.fireEvent(checkbox, 'change'); |
| } |
| function eachSelectedCheckboxCell(callback) { |
| var selRange = instance.getSelectedRange(); |
| if (!selRange) { |
| return; |
| } |
| var topLeft = selRange.getTopLeftCorner(); |
| var bottomRight = selRange.getBottomRightCorner(); |
| for (var row = topLeft.row; row <= bottomRight.row; row++) { |
| for (var col = topLeft.col; col <= bottomRight.col; col++) { |
| var cell = instance.getCell(row, col); |
| var cellProperties$__7 = instance.getCellMeta(row, col); |
| var checkboxes = cell.querySelectorAll('input[type=checkbox]'); |
| if (checkboxes.length > 0 && !cellProperties$__7.readOnly) { |
| callback(checkboxes); |
| } |
| } |
| } |
| } |
| } |
| function registerEvents(instance) { |
| var eventManager = isCheckboxListenerAdded.get(instance); |
| if (!eventManager) { |
| eventManager = new EventManager(instance); |
| eventManager.addEventListener(instance.rootElement, 'click', (function(event) { |
| return onClick(event, instance); |
| })); |
| eventManager.addEventListener(instance.rootElement, 'mouseup', (function(event) { |
| return onMouseUp(event, instance); |
| })); |
| eventManager.addEventListener(instance.rootElement, 'change', (function(event) { |
| return onChange(event, instance); |
| })); |
| isCheckboxListenerAdded.set(instance, eventManager); |
| } |
| return eventManager; |
| } |
| function createInput() { |
| var input = document.createElement('input'); |
| input.className = 'htCheckboxRendererInput'; |
| input.type = 'checkbox'; |
| input.setAttribute('autocomplete', 'off'); |
| input.setAttribute('tabindex', '-1'); |
| return input.cloneNode(false); |
| } |
| function createLabel(text) { |
| var label = document.createElement('label'); |
| label.className = 'htCheckboxRendererLabel'; |
| label.appendChild(document.createTextNode(text)); |
| return label.cloneNode(true); |
| } |
| function onMouseUp(event, instance) { |
| if (!isCheckboxInput(event.target)) { |
| return; |
| } |
| setTimeout(instance.listen, 10); |
| } |
| function onClick(event, instance) { |
| if (!isCheckboxInput(event.target)) { |
| return false; |
| } |
| var row = parseInt(event.target.getAttribute('data-row'), 10); |
| var col = parseInt(event.target.getAttribute('data-col'), 10); |
| var cellProperties = instance.getCellMeta(row, col); |
| if (cellProperties.readOnly) { |
| event.preventDefault(); |
| } |
| } |
| function onChange(event, instance) { |
| if (!isCheckboxInput(event.target)) { |
| return false; |
| } |
| var row = parseInt(event.target.getAttribute('data-row'), 10); |
| var col = parseInt(event.target.getAttribute('data-col'), 10); |
| var cellProperties = instance.getCellMeta(row, col); |
| if (!cellProperties.readOnly) { |
| instance.setDataAtCell(row, col, event.target.checked ? (cellProperties.checkedTemplate || true) : (cellProperties.uncheckedTemplate || false)); |
| } |
| } |
| function isCheckboxInput(element) { |
| return element.tagName === 'INPUT' && element.getAttribute('type') === 'checkbox'; |
| } |
| ; |
| registerRenderer('checkbox', checkboxRenderer); |
| |
| //# |
| },{"eventManager":42,"helpers/dom/element":47,"helpers/dom/event":48,"helpers/function":50,"helpers/string":55,"helpers/unicode":56,"renderers":105}],109:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| htmlRenderer: {get: function() { |
| return htmlRenderer; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47_renderers__; |
| var fastInnerHTML = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}).fastInnerHTML; |
| var $__1 = ($___46__46__47_renderers__ = _dereq_("renderers"), $___46__46__47_renderers__ && $___46__46__47_renderers__.__esModule && $___46__46__47_renderers__ || {default: $___46__46__47_renderers__}), |
| getRenderer = $__1.getRenderer, |
| registerRenderer = $__1.registerRenderer; |
| function htmlRenderer(instance, TD, row, col, prop, value, cellProperties) { |
| getRenderer('base').apply(this, arguments); |
| if (value === null || value === void 0) { |
| value = ''; |
| } |
| fastInnerHTML(TD, value); |
| } |
| ; |
| registerRenderer('html', htmlRenderer); |
| |
| //# |
| },{"helpers/dom/element":47,"renderers":105}],110:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| numericRenderer: {get: function() { |
| return numericRenderer; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__numbro__, |
| $___46__46__47_renderers__, |
| $___46__46__47_helpers_47_number__; |
| var numbro = ($__numbro__ = _dereq_("numbro"), $__numbro__ && $__numbro__.__esModule && $__numbro__ || {default: $__numbro__}).default; |
| var $__1 = ($___46__46__47_renderers__ = _dereq_("renderers"), $___46__46__47_renderers__ && $___46__46__47_renderers__.__esModule && $___46__46__47_renderers__ || {default: $___46__46__47_renderers__}), |
| getRenderer = $__1.getRenderer, |
| registerRenderer = $__1.registerRenderer; |
| var isNumeric = ($___46__46__47_helpers_47_number__ = _dereq_("helpers/number"), $___46__46__47_helpers_47_number__ && $___46__46__47_helpers_47_number__.__esModule && $___46__46__47_helpers_47_number__ || {default: $___46__46__47_helpers_47_number__}).isNumeric; |
| function numericRenderer(instance, TD, row, col, prop, value, cellProperties) { |
| if (isNumeric(value)) { |
| if (typeof cellProperties.language !== 'undefined') { |
| numbro.culture(cellProperties.language); |
| } |
| value = numbro(value).format(cellProperties.format || '0'); |
| var className = cellProperties.className || ''; |
| var classArr = className.length ? className.split(' ') : []; |
| if (classArr.indexOf('htLeft') < 0 && classArr.indexOf('htCenter') < 0 && classArr.indexOf('htRight') < 0 && classArr.indexOf('htJustify') < 0) { |
| classArr.push('htRight'); |
| } |
| if (classArr.indexOf('htNumeric') < 0) { |
| classArr.push('htNumeric'); |
| } |
| cellProperties.className = classArr.join(' '); |
| } |
| getRenderer('text')(instance, TD, row, col, prop, value, cellProperties); |
| } |
| ; |
| registerRenderer('numeric', numericRenderer); |
| |
| //# |
| },{"helpers/number":52,"numbro":"numbro","renderers":105}],111:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| passwordRenderer: {get: function() { |
| return passwordRenderer; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47_renderers__; |
| var fastInnerHTML = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}).fastInnerHTML; |
| var $__1 = ($___46__46__47_renderers__ = _dereq_("renderers"), $___46__46__47_renderers__ && $___46__46__47_renderers__.__esModule && $___46__46__47_renderers__ || {default: $___46__46__47_renderers__}), |
| getRenderer = $__1.getRenderer, |
| registerRenderer = $__1.registerRenderer; |
| function passwordRenderer(instance, TD, row, col, prop, value, cellProperties) { |
| getRenderer('text').apply(this, arguments); |
| value = TD.innerHTML; |
| var hash; |
| var hashLength = cellProperties.hashLength || value.length; |
| var hashSymbol = cellProperties.hashSymbol || '*'; |
| for (hash = ''; hash.split(hashSymbol).length - 1 < hashLength; hash += hashSymbol) {} |
| fastInnerHTML(TD, hash); |
| } |
| ; |
| registerRenderer('password', passwordRenderer); |
| |
| //# |
| },{"helpers/dom/element":47,"renderers":105}],112:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| textRenderer: {get: function() { |
| return textRenderer; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47_helpers_47_mixed__, |
| $___46__46__47_renderers__; |
| var $__0 = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}), |
| empty = $__0.empty, |
| fastInnerText = $__0.fastInnerText; |
| var stringify = ($___46__46__47_helpers_47_mixed__ = _dereq_("helpers/mixed"), $___46__46__47_helpers_47_mixed__ && $___46__46__47_helpers_47_mixed__.__esModule && $___46__46__47_helpers_47_mixed__ || {default: $___46__46__47_helpers_47_mixed__}).stringify; |
| var $__2 = ($___46__46__47_renderers__ = _dereq_("renderers"), $___46__46__47_renderers__ && $___46__46__47_renderers__.__esModule && $___46__46__47_renderers__ || {default: $___46__46__47_renderers__}), |
| getRenderer = $__2.getRenderer, |
| registerRenderer = $__2.registerRenderer; |
| function textRenderer(instance, TD, row, col, prop, value, cellProperties) { |
| getRenderer('base').apply(this, arguments); |
| if (!value && cellProperties.placeholder) { |
| value = cellProperties.placeholder; |
| } |
| var escaped = stringify(value); |
| if (!instance.getSettings().trimWhitespace) { |
| escaped = escaped.replace(/ /g, String.fromCharCode(160)); |
| } |
| if (cellProperties.rendererTemplate) { |
| empty(TD); |
| var TEMPLATE = document.createElement('TEMPLATE'); |
| TEMPLATE.setAttribute('bind', '{{}}'); |
| TEMPLATE.innerHTML = cellProperties.rendererTemplate; |
| HTMLTemplateElement.decorate(TEMPLATE); |
| TEMPLATE.model = instance.getSourceDataAtRow(row); |
| TD.appendChild(TEMPLATE); |
| } else { |
| fastInnerText(TD, escaped); |
| } |
| } |
| ; |
| registerRenderer('text', textRenderer); |
| |
| //# |
| },{"helpers/dom/element":47,"helpers/mixed":51,"renderers":105}],113:[function(_dereq_,module,exports){ |
| // jscs:disable |
| /* jshint ignore:start */ |
| (function(global) { |
| 'use strict'; |
| if (global.$traceurRuntime) { |
| return; |
| } |
| var $Object = Object; |
| var $TypeError = TypeError; |
| var $create = $Object.create; |
| var $defineProperties = $Object.defineProperties; |
| var $defineProperty = $Object.defineProperty; |
| var $freeze = $Object.freeze; |
| var $getOwnPropertyDescriptor = $Object.getOwnPropertyDescriptor; |
| var $getOwnPropertyNames = $Object.getOwnPropertyNames; |
| var $keys = $Object.keys; |
| var $isExtensible = Object.isExtensible; |
| function nonEnum(value) { |
| return { |
| configurable: true, |
| enumerable: false, |
| value: value, |
| writable: true |
| }; |
| } |
| var method = nonEnum; |
| var counter = 0; |
| function newUniqueString() { |
| return '__$' + Math.floor(Math.random() * 1e9) + '$' + ++counter + '$__'; |
| } |
| var symbolInternalProperty = newUniqueString(); |
| var symbolDescriptionProperty = newUniqueString(); |
| var symbolDataProperty = newUniqueString(); |
| var symbolValues = $create(null); |
| var privateNames = $create(null); |
| function isPrivateName(s) { |
| return privateNames[s]; |
| } |
| function createPrivateName() { |
| var s = newUniqueString(); |
| privateNames[s] = true; |
| return s; |
| } |
| function isShimSymbol(symbol) { |
| return typeof symbol === 'object' && symbol instanceof SymbolValue; |
| } |
| function typeOf(v) { |
| if (isShimSymbol(v)) |
| return 'symbol'; |
| return typeof v; |
| } |
| function Symbol(description) { |
| var value = new SymbolValue(description); |
| if (!(this instanceof Symbol)) |
| return value; |
| throw new TypeError('Symbol cannot be new\'ed'); |
| } |
| $defineProperty(Symbol.prototype, 'constructor', nonEnum(Symbol)); |
| $defineProperty(Symbol.prototype, 'toString', method(function() { |
| var symbolValue = this[symbolDataProperty]; |
| if (!getOption('symbols')) |
| return symbolValue[symbolInternalProperty]; |
| if (!symbolValue) |
| throw TypeError('Conversion from symbol to string'); |
| var desc = symbolValue[symbolDescriptionProperty]; |
| if (desc === undefined) |
| desc = ''; |
| return 'Symbol(' + desc + ')'; |
| })); |
| $defineProperty(Symbol.prototype, 'valueOf', method(function() { |
| var symbolValue = this[symbolDataProperty]; |
| if (!symbolValue) |
| throw TypeError('Conversion from symbol to string'); |
| if (!getOption('symbols')) |
| return symbolValue[symbolInternalProperty]; |
| return symbolValue; |
| })); |
| function SymbolValue(description) { |
| var key = newUniqueString(); |
| $defineProperty(this, symbolDataProperty, {value: this}); |
| $defineProperty(this, symbolInternalProperty, {value: key}); |
| $defineProperty(this, symbolDescriptionProperty, {value: description}); |
| freeze(this); |
| symbolValues[key] = this; |
| } |
| $defineProperty(SymbolValue.prototype, 'constructor', nonEnum(Symbol)); |
| $defineProperty(SymbolValue.prototype, 'toString', { |
| value: Symbol.prototype.toString, |
| enumerable: false |
| }); |
| $defineProperty(SymbolValue.prototype, 'valueOf', { |
| value: Symbol.prototype.valueOf, |
| enumerable: false |
| }); |
| var hashProperty = createPrivateName(); |
| var hashPropertyDescriptor = {value: undefined}; |
| var hashObjectProperties = { |
| hash: {value: undefined}, |
| self: {value: undefined} |
| }; |
| var hashCounter = 0; |
| function getOwnHashObject(object) { |
| var hashObject = object[hashProperty]; |
| if (hashObject && hashObject.self === object) |
| return hashObject; |
| if ($isExtensible(object)) { |
| hashObjectProperties.hash.value = hashCounter++; |
| hashObjectProperties.self.value = object; |
| hashPropertyDescriptor.value = $create(null, hashObjectProperties); |
| $defineProperty(object, hashProperty, hashPropertyDescriptor); |
| return hashPropertyDescriptor.value; |
| } |
| return undefined; |
| } |
| function freeze(object) { |
| getOwnHashObject(object); |
| return $freeze.apply(this, arguments); |
| } |
| freeze(SymbolValue.prototype); |
| function isSymbolString(s) { |
| return symbolValues[s] || privateNames[s]; |
| } |
| function toProperty(name) { |
| if (isShimSymbol(name)) |
| return name[symbolInternalProperty]; |
| return name; |
| } |
| function getOwnPropertySymbols(object) { |
| var rv = []; |
| var names = $getOwnPropertyNames(object); |
| for (var i = 0; i < names.length; i++) { |
| var symbol = symbolValues[names[i]]; |
| if (symbol) { |
| rv.push(symbol); |
| } |
| } |
| return rv; |
| } |
| function getOption(name) { |
| return global.traceur && global.traceur.options[name]; |
| } |
| function exportStar(object) { |
| for (var i = 1; i < arguments.length; i++) { |
| var names = $getOwnPropertyNames(arguments[i]); |
| for (var j = 0; j < names.length; j++) { |
| var name = names[j]; |
| if (isSymbolString(name)) |
| continue; |
| (function(mod, name) { |
| $defineProperty(object, name, { |
| get: function() { |
| return mod[name]; |
| }, |
| enumerable: true |
| }); |
| })(arguments[i], names[j]); |
| } |
| } |
| return object; |
| } |
| function isObject(x) { |
| return x != null && (typeof x === 'object' || typeof x === 'function'); |
| } |
| function toObject(x) { |
| if (x == null) |
| throw $TypeError(); |
| return $Object(x); |
| } |
| function checkObjectCoercible(argument) { |
| if (argument == null) { |
| throw new TypeError('Value cannot be converted to an Object'); |
| } |
| return argument; |
| } |
| function polyfillSymbol(global, Symbol) { |
| if (!global.Symbol) { |
| global.Symbol = Symbol; |
| Object.getOwnPropertySymbols = getOwnPropertySymbols; |
| } |
| if (!global.Symbol.iterator) { |
| global.Symbol.iterator = Symbol('Symbol.iterator'); |
| } |
| } |
| function setupGlobals(global) { |
| polyfillSymbol(global, Symbol); |
| global.Reflect = global.Reflect || {}; |
| global.Reflect.global = global.Reflect.global || global; |
| } |
| setupGlobals(global); |
| global.$traceurRuntime = { |
| checkObjectCoercible: checkObjectCoercible, |
| createPrivateName: createPrivateName, |
| defineProperties: $defineProperties, |
| defineProperty: $defineProperty, |
| exportStar: exportStar, |
| getOwnHashObject: getOwnHashObject, |
| getOwnPropertyDescriptor: $getOwnPropertyDescriptor, |
| getOwnPropertyNames: $getOwnPropertyNames, |
| isObject: isObject, |
| isPrivateName: isPrivateName, |
| isSymbolString: isSymbolString, |
| keys: $keys, |
| setupGlobals: setupGlobals, |
| toObject: toObject, |
| toProperty: toProperty, |
| typeof: typeOf |
| }; |
| })(window); |
| (function() { |
| 'use strict'; |
| var $toProperty = $traceurRuntime.toProperty; |
| |
| function spread() { |
| var rv = [], |
| j = 0, |
| iterResult; |
| for (var i = 0; i < arguments.length; i++) { |
| var valueToSpread = $traceurRuntime.checkObjectCoercible(arguments[i]); |
| |
| if (typeof valueToSpread[$toProperty(Symbol.iterator)] !== 'function') { |
| valueToSpread[$toProperty(Symbol.iterator)] = function() { |
| var value = this; |
| var length = value.length; |
| var index = 0; |
| |
| return { |
| next: function() { |
| var result = {done: true}; |
| |
| if (index < length) { |
| result.done = false; |
| result.value = value[index]; |
| ++index; |
| } |
| |
| return result; |
| } |
| } |
| }; |
| } |
| var iter = valueToSpread[$toProperty(Symbol.iterator)](); |
| |
| while (!(iterResult = iter.next()).done) { |
| rv[j++] = iterResult.value; |
| } |
| } |
| return rv; |
| } |
| $traceurRuntime.spread = spread; |
| })(); |
| (function() { |
| 'use strict'; |
| var $Object = Object; |
| var $TypeError = TypeError; |
| var $create = $Object.create; |
| var $defineProperties = $traceurRuntime.defineProperties; |
| var $defineProperty = $traceurRuntime.defineProperty; |
| var $getOwnPropertyDescriptor = $traceurRuntime.getOwnPropertyDescriptor; |
| var $getPrototypeOf = Object.getPrototypeOf; |
| var $toProperty = $traceurRuntime.toProperty; |
| var $__0 = Object, |
| getOwnPropertyNames = $__0.getOwnPropertyNames, |
| getOwnPropertySymbols = $__0.getOwnPropertySymbols; |
| function superDescriptor(homeObject, name) { |
| var proto = $getPrototypeOf(homeObject); |
| do { |
| var result = $getOwnPropertyDescriptor(proto, name); |
| if (result) |
| return result; |
| proto = $getPrototypeOf(proto); |
| } while (proto); |
| return undefined; |
| } |
| function superConstructor(ctor) { |
| return ctor.__proto__; |
| } |
| function superCall(self, homeObject, name, args) { |
| return superGet(self, homeObject, name).apply(self, args); |
| } |
| function superGet(self, homeObject, name) { |
| var descriptor = superDescriptor(homeObject, name); |
| if (descriptor) { |
| if (!descriptor.get) |
| return descriptor.value; |
| return descriptor.get.call(self); |
| } |
| return undefined; |
| } |
| function superSet(self, homeObject, name, value) { |
| var descriptor = superDescriptor(homeObject, name); |
| if (descriptor && descriptor.set) { |
| descriptor.set.call(self, value); |
| return value; |
| } |
| throw $TypeError(("super has no setter '" + name + "'.")); |
| } |
| function getDescriptors(object) { |
| var descriptors = {}; |
| var names = getOwnPropertyNames(object); |
| for (var i = 0; i < names.length; i++) { |
| var name = names[i]; |
| descriptors[name] = $getOwnPropertyDescriptor(object, name); |
| } |
| var symbols = getOwnPropertySymbols(object); |
| for (var i = 0; i < symbols.length; i++) { |
| var symbol = symbols[i]; |
| descriptors[$toProperty(symbol)] = $getOwnPropertyDescriptor(object, $toProperty(symbol)); |
| } |
| return descriptors; |
| } |
| function createClass(ctor, object, staticObject, superClass) { |
| $defineProperty(object, 'constructor', { |
| value: ctor, |
| configurable: true, |
| enumerable: false, |
| writable: true |
| }); |
| if (arguments.length > 3) { |
| if (typeof superClass === 'function') |
| ctor.__proto__ = superClass; |
| ctor.prototype = $create(getProtoParent(superClass), getDescriptors(object)); |
| } else { |
| ctor.prototype = object; |
| } |
| $defineProperty(ctor, 'prototype', { |
| configurable: false, |
| writable: false |
| }); |
| return $defineProperties(ctor, getDescriptors(staticObject)); |
| } |
| function getProtoParent(superClass) { |
| if (typeof superClass === 'function') { |
| var prototype = superClass.prototype; |
| if ($Object(prototype) === prototype || prototype === null) |
| return superClass.prototype; |
| throw new $TypeError('super prototype must be an Object or null'); |
| } |
| if (superClass === null) |
| return null; |
| throw new $TypeError(("Super expression must either be null or a function, not " + typeof superClass + ".")); |
| } |
| function defaultSuperCall(self, homeObject, args) { |
| if ($getPrototypeOf(homeObject) !== null) |
| superCall(self, homeObject, 'constructor', args); |
| } |
| $traceurRuntime.createClass = createClass; |
| $traceurRuntime.defaultSuperCall = defaultSuperCall; |
| $traceurRuntime.superCall = superCall; |
| $traceurRuntime.superConstructor = superConstructor; |
| $traceurRuntime.superGet = superGet; |
| $traceurRuntime.superSet = superSet; |
| })(); |
| /* jshint ignore:end */ |
| |
| },{}],114:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| TableView: {get: function() { |
| return TableView; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $__browser__, |
| $__helpers_47_dom_47_element__, |
| $__eventManager__, |
| $__helpers_47_dom_47_event__, |
| $__3rdparty_47_walkontable_47_src_47_cell_47_coords__, |
| $__3rdparty_47_walkontable_47_src_47_selection__, |
| $__3rdparty_47_walkontable_47_src_47_core__; |
| var Handsontable = ($__browser__ = _dereq_("browser"), $__browser__ && $__browser__.__esModule && $__browser__ || {default: $__browser__}).default; |
| var $__1 = ($__helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $__helpers_47_dom_47_element__ && $__helpers_47_dom_47_element__.__esModule && $__helpers_47_dom_47_element__ || {default: $__helpers_47_dom_47_element__}), |
| addClass = $__1.addClass, |
| empty = $__1.empty, |
| fastInnerHTML = $__1.fastInnerHTML, |
| fastInnerText = $__1.fastInnerText, |
| getScrollbarWidth = $__1.getScrollbarWidth, |
| hasClass = $__1.hasClass, |
| isChildOf = $__1.isChildOf, |
| isInput = $__1.isInput, |
| isOutsideInput = $__1.isOutsideInput; |
| var eventManagerObject = ($__eventManager__ = _dereq_("eventManager"), $__eventManager__ && $__eventManager__.__esModule && $__eventManager__ || {default: $__eventManager__}).eventManager; |
| var $__3 = ($__helpers_47_dom_47_event__ = _dereq_("helpers/dom/event"), $__helpers_47_dom_47_event__ && $__helpers_47_dom_47_event__.__esModule && $__helpers_47_dom_47_event__ || {default: $__helpers_47_dom_47_event__}), |
| stopPropagation = $__3.stopPropagation, |
| isImmediatePropagationStopped = $__3.isImmediatePropagationStopped, |
| isRightClick = $__3.isRightClick, |
| isLeftClick = $__3.isLeftClick; |
| var WalkontableCellCoords = ($__3rdparty_47_walkontable_47_src_47_cell_47_coords__ = _dereq_("3rdparty/walkontable/src/cell/coords"), $__3rdparty_47_walkontable_47_src_47_cell_47_coords__ && $__3rdparty_47_walkontable_47_src_47_cell_47_coords__.__esModule && $__3rdparty_47_walkontable_47_src_47_cell_47_coords__ || {default: $__3rdparty_47_walkontable_47_src_47_cell_47_coords__}).WalkontableCellCoords; |
| var WalkontableSelection = ($__3rdparty_47_walkontable_47_src_47_selection__ = _dereq_("3rdparty/walkontable/src/selection"), $__3rdparty_47_walkontable_47_src_47_selection__ && $__3rdparty_47_walkontable_47_src_47_selection__.__esModule && $__3rdparty_47_walkontable_47_src_47_selection__ || {default: $__3rdparty_47_walkontable_47_src_47_selection__}).WalkontableSelection; |
| var Walkontable = ($__3rdparty_47_walkontable_47_src_47_core__ = _dereq_("3rdparty/walkontable/src/core"), $__3rdparty_47_walkontable_47_src_47_core__ && $__3rdparty_47_walkontable_47_src_47_core__.__esModule && $__3rdparty_47_walkontable_47_src_47_core__ || {default: $__3rdparty_47_walkontable_47_src_47_core__}).Walkontable; |
| Handsontable.TableView = TableView; |
| function TableView(instance) { |
| var $__7 = this; |
| var that = this; |
| this.eventManager = eventManagerObject(instance); |
| this.instance = instance; |
| this.settings = instance.getSettings(); |
| this.selectionMouseDown = false; |
| var originalStyle = instance.rootElement.getAttribute('style'); |
| if (originalStyle) { |
| instance.rootElement.setAttribute('data-originalstyle', originalStyle); |
| } |
| addClass(instance.rootElement, 'handsontable'); |
| var table = document.createElement('TABLE'); |
| addClass(table, 'htCore'); |
| if (instance.getSettings().tableClassName) { |
| addClass(table, instance.getSettings().tableClassName); |
| } |
| this.THEAD = document.createElement('THEAD'); |
| table.appendChild(this.THEAD); |
| this.TBODY = document.createElement('TBODY'); |
| table.appendChild(this.TBODY); |
| instance.table = table; |
| instance.container.insertBefore(table, instance.container.firstChild); |
| this.eventManager.addEventListener(instance.rootElement, 'mousedown', function(event) { |
| this.selectionMouseDown = true; |
| if (!that.isTextSelectionAllowed(event.target)) { |
| clearTextSelection(); |
| event.preventDefault(); |
| window.focus(); |
| } |
| }); |
| this.eventManager.addEventListener(instance.rootElement, 'mouseup', function(event) { |
| this.selectionMouseDown = false; |
| }); |
| this.eventManager.addEventListener(instance.rootElement, 'mousemove', function(event) { |
| if (this.selectionMouseDown && !that.isTextSelectionAllowed(event.target)) { |
| clearTextSelection(); |
| event.preventDefault(); |
| } |
| }); |
| this.eventManager.addEventListener(document.documentElement, 'keyup', function(event) { |
| if (instance.selection.isInProgress() && !event.shiftKey) { |
| instance.selection.finish(); |
| } |
| }); |
| var isMouseDown; |
| this.isMouseDown = function() { |
| return isMouseDown; |
| }; |
| this.eventManager.addEventListener(document.documentElement, 'mouseup', function(event) { |
| if (instance.selection.isInProgress() && event.which === 1) { |
| instance.selection.finish(); |
| } |
| isMouseDown = false; |
| if (isOutsideInput(document.activeElement)) { |
| instance.unlisten(); |
| } |
| }); |
| this.eventManager.addEventListener(document.documentElement, 'mousedown', function(event) { |
| var originalTarget = event.target; |
| var next = event.target; |
| var eventX = event.x || event.clientX; |
| var eventY = event.y || event.clientY; |
| if (isMouseDown || !instance.rootElement) { |
| return; |
| } |
| if (next === instance.view.wt.wtTable.holder) { |
| var scrollbarWidth = getScrollbarWidth(); |
| if (document.elementFromPoint(eventX + scrollbarWidth, eventY) !== instance.view.wt.wtTable.holder || document.elementFromPoint(eventX, eventY + scrollbarWidth) !== instance.view.wt.wtTable.holder) { |
| return; |
| } |
| } else { |
| while (next !== document.documentElement) { |
| if (next === null) { |
| if (event.isTargetWebComponent) { |
| break; |
| } |
| return; |
| } |
| if (next === instance.rootElement) { |
| return; |
| } |
| next = next.parentNode; |
| } |
| } |
| var outsideClickDeselects = typeof that.settings.outsideClickDeselects === 'function' ? that.settings.outsideClickDeselects(originalTarget) : that.settings.outsideClickDeselects; |
| if (outsideClickDeselects) { |
| instance.deselectCell(); |
| } else { |
| instance.destroyEditor(); |
| } |
| }); |
| this.eventManager.addEventListener(table, 'selectstart', function(event) { |
| if (that.settings.fragmentSelection || isInput(event.target)) { |
| return; |
| } |
| event.preventDefault(); |
| }); |
| var clearTextSelection = function() { |
| if (window.getSelection) { |
| if (window.getSelection().empty) { |
| window.getSelection().empty(); |
| } else if (window.getSelection().removeAllRanges) { |
| window.getSelection().removeAllRanges(); |
| } |
| } else if (document.selection) { |
| document.selection.empty(); |
| } |
| }; |
| var selections = [new WalkontableSelection({ |
| className: 'current', |
| border: { |
| width: 2, |
| color: '#5292F7', |
| cornerVisible: function() { |
| return that.settings.fillHandle && !that.isCellEdited() && !instance.selection.isMultiple(); |
| }, |
| multipleSelectionHandlesVisible: function() { |
| return !that.isCellEdited() && !instance.selection.isMultiple(); |
| } |
| } |
| }), new WalkontableSelection({ |
| className: 'area', |
| border: { |
| width: 1, |
| color: '#89AFF9', |
| cornerVisible: function() { |
| return that.settings.fillHandle && !that.isCellEdited() && instance.selection.isMultiple(); |
| }, |
| multipleSelectionHandlesVisible: function() { |
| return !that.isCellEdited() && instance.selection.isMultiple(); |
| } |
| } |
| }), new WalkontableSelection({ |
| className: 'highlight', |
| highlightRowClassName: that.settings.currentRowClassName, |
| highlightColumnClassName: that.settings.currentColClassName |
| }), new WalkontableSelection({ |
| className: 'fill', |
| border: { |
| width: 1, |
| color: 'red' |
| } |
| })]; |
| selections.current = selections[0]; |
| selections.area = selections[1]; |
| selections.highlight = selections[2]; |
| selections.fill = selections[3]; |
| var walkontableConfig = { |
| debug: function() { |
| return that.settings.debug; |
| }, |
| externalRowCalculator: this.instance.getPlugin('autoRowSize') && this.instance.getPlugin('autoRowSize').isEnabled(), |
| table: table, |
| preventOverflow: (function() { |
| return $__7.settings.preventOverflow; |
| }), |
| stretchH: function() { |
| return that.settings.stretchH; |
| }, |
| data: instance.getDataAtCell, |
| totalRows: (function() { |
| return instance.countRows(); |
| }), |
| totalColumns: (function() { |
| return instance.countCols(); |
| }), |
| fixedColumnsLeft: function() { |
| return that.settings.fixedColumnsLeft; |
| }, |
| fixedRowsTop: function() { |
| return that.settings.fixedRowsTop; |
| }, |
| fixedRowsBottom: function() { |
| return that.settings.fixedRowsBottom; |
| }, |
| minSpareRows: function() { |
| return that.settings.minSpareRows; |
| }, |
| renderAllRows: that.settings.renderAllRows, |
| rowHeaders: function() { |
| var headerRenderers = []; |
| if (instance.hasRowHeaders()) { |
| headerRenderers.push(function(row, TH) { |
| that.appendRowHeader(row, TH); |
| }); |
| } |
| Handsontable.hooks.run(instance, 'afterGetRowHeaderRenderers', headerRenderers); |
| return headerRenderers; |
| }, |
| columnHeaders: function() { |
| var headerRenderers = []; |
| if (instance.hasColHeaders()) { |
| headerRenderers.push(function(column, TH) { |
| that.appendColHeader(column, TH); |
| }); |
| } |
| Handsontable.hooks.run(instance, 'afterGetColumnHeaderRenderers', headerRenderers); |
| return headerRenderers; |
| }, |
| columnWidth: instance.getColWidth, |
| rowHeight: instance.getRowHeight, |
| cellRenderer: function(row, col, TD) { |
| var cellProperties = that.instance.getCellMeta(row, col); |
| var prop = that.instance.colToProp(col); |
| var value = that.instance.getDataAtRowProp(row, prop); |
| Handsontable.hooks.run(that.instance, 'beforeRenderer', TD, row, col, prop, value, cellProperties); |
| that.instance.getCellRenderer(cellProperties)(that.instance, TD, row, col, prop, value, cellProperties); |
| Handsontable.hooks.run(that.instance, 'afterRenderer', TD, row, col, prop, value, cellProperties); |
| }, |
| selections: selections, |
| hideBorderOnMouseDownOver: function() { |
| return that.settings.fragmentSelection; |
| }, |
| onCellMouseDown: function(event, coords, TD, wt) { |
| instance.listen(); |
| that.activeWt = wt; |
| isMouseDown = true; |
| Handsontable.hooks.run(instance, 'beforeOnCellMouseDown', event, coords, TD); |
| if (isImmediatePropagationStopped(event)) { |
| return; |
| } |
| var actualSelection = instance.getSelectedRange(); |
| var selection = instance.selection; |
| var selectedHeader = selection.selectedHeader; |
| if (event.shiftKey && actualSelection) { |
| if (coords.row >= 0 && coords.col >= 0) { |
| selection.setRangeEnd(coords); |
| selection.setSelectedHeaders(false, false); |
| } else if ((selectedHeader.cols || selectedHeader.rows) && coords.row >= 0 && coords.col >= 0) { |
| selection.setRangeEnd(new WalkontableCellCoords(coords.row, coords.col)); |
| selection.setSelectedHeaders(false, false); |
| } else if (selectedHeader.cols && coords.row < 0) { |
| selection.setRangeEnd(new WalkontableCellCoords(actualSelection.to.row, coords.col)); |
| } else if (selectedHeader.rows && coords.col < 0) { |
| selection.setRangeEnd(new WalkontableCellCoords(coords.row, actualSelection.to.col)); |
| } else if ((!selectedHeader.cols && !selectedHeader.rows && coords.col < 0) || (selectedHeader.cols && coords.col < 0)) { |
| selection.setRangeStartOnly(new WalkontableCellCoords(actualSelection.from.row, 0)); |
| selection.setRangeEnd(new WalkontableCellCoords(coords.row, instance.countCols() - 1)); |
| selection.setSelectedHeaders(true, false); |
| } else if ((!selectedHeader.cols && !selectedHeader.rows && coords.row < 0) || (selectedHeader.rows && coords.row < 0)) { |
| selection.setRangeStartOnly(new WalkontableCellCoords(0, actualSelection.from.col)); |
| selection.setRangeEnd(new WalkontableCellCoords(instance.countRows() - 1, coords.col)); |
| selection.setSelectedHeaders(false, true); |
| } |
| } else { |
| var doNewSelection = true; |
| if (actualSelection) { |
| var $__8 = actualSelection, |
| from = $__8.from, |
| to = $__8.to; |
| var coordsNotInSelection = !selection.inInSelection(coords); |
| if (coords.row < 0 && selectedHeader.cols) { |
| var start = Math.min(from.col, to.col); |
| var end = Math.max(from.col, to.col); |
| doNewSelection = (coords.col < start || coords.col > end); |
| } else if (coords.col < 0 && selectedHeader.rows) { |
| var start$__9 = Math.min(from.row, to.row); |
| var end$__10 = Math.max(from.row, to.row); |
| doNewSelection = (coords.row < start$__9 || coords.row > end$__10); |
| } else { |
| doNewSelection = coordsNotInSelection; |
| } |
| } |
| var rightClick = isRightClick(event); |
| var leftClick = isLeftClick(event); |
| if (coords.row < 0 && coords.col >= 0) { |
| selection.setSelectedHeaders(false, true); |
| if (leftClick || (rightClick && doNewSelection)) { |
| selection.setRangeStartOnly(new WalkontableCellCoords(0, coords.col)); |
| selection.setRangeEnd(new WalkontableCellCoords(Math.max(instance.countRows() - 1, 0), coords.col), false); |
| } |
| } else if (coords.col < 0 && coords.row >= 0) { |
| selection.setSelectedHeaders(true, false); |
| if (leftClick || (rightClick && doNewSelection)) { |
| selection.setRangeStartOnly(new WalkontableCellCoords(coords.row, 0)); |
| selection.setRangeEnd(new WalkontableCellCoords(coords.row, Math.max(instance.countCols() - 1, 0)), false); |
| } |
| } else { |
| selection.setSelectedHeaders(false, false, coords.col < 0 && coords.row < 0); |
| coords.row = coords.row < 0 ? 0 : coords.row; |
| coords.col = coords.col < 0 ? 0 : coords.col; |
| if (leftClick || (rightClick && doNewSelection)) { |
| selection.setRangeStart(coords); |
| } |
| } |
| } |
| Handsontable.hooks.run(instance, 'afterOnCellMouseDown', event, coords, TD); |
| that.activeWt = that.wt; |
| }, |
| onCellMouseOver: function(event, coords, TD, wt) { |
| var blockCalculations = { |
| row: false, |
| column: false |
| }; |
| that.activeWt = wt; |
| Handsontable.hooks.run(instance, 'beforeOnCellMouseOver', event, coords, TD, blockCalculations); |
| if (isImmediatePropagationStopped(event)) { |
| return; |
| } |
| if (event.button === 0) { |
| if (coords.row >= 0 && coords.col >= 0) { |
| if (isMouseDown) { |
| instance.selection.setRangeEnd(coords); |
| } |
| } else { |
| if (isMouseDown) { |
| if (coords.row < 0 && !blockCalculations.column) { |
| if (instance.selection.selectedHeader.cols) { |
| instance.selection.setRangeEnd(new WalkontableCellCoords(instance.countRows() - 1, coords.col), false); |
| instance.selection.setSelectedHeaders(false, true); |
| } else { |
| instance.selection.setRangeEnd(new WalkontableCellCoords(coords.row, coords.col), false); |
| } |
| } |
| if (coords.col < 0 && !blockCalculations.row) { |
| if (instance.selection.selectedHeader.rows) { |
| instance.selection.setRangeEnd(new WalkontableCellCoords(coords.row, instance.countCols() - 1), false); |
| instance.selection.setSelectedHeaders(true, false); |
| } else { |
| instance.selection.setRangeEnd(new WalkontableCellCoords(coords.row, coords.col), false); |
| } |
| } |
| } |
| } |
| } |
| Handsontable.hooks.run(instance, 'afterOnCellMouseOver', event, coords, TD); |
| that.activeWt = that.wt; |
| }, |
| onCellCornerMouseDown: function(event) { |
| event.preventDefault(); |
| Handsontable.hooks.run(instance, 'afterOnCellCornerMouseDown', event); |
| }, |
| beforeDraw: function(force) { |
| that.beforeRender(force); |
| }, |
| onDraw: function(force) { |
| that.onDraw(force); |
| }, |
| onScrollVertically: function() { |
| instance.runHooks('afterScrollVertically'); |
| }, |
| onScrollHorizontally: function() { |
| instance.runHooks('afterScrollHorizontally'); |
| }, |
| onBeforeDrawBorders: function(corners, borderClassName) { |
| instance.runHooks('beforeDrawBorders', corners, borderClassName); |
| }, |
| onBeforeTouchScroll: function() { |
| instance.runHooks('beforeTouchScroll'); |
| }, |
| onAfterMomentumScroll: function() { |
| instance.runHooks('afterMomentumScroll'); |
| }, |
| onBeforeStretchingColumnWidth: function(stretchedWidth, column) { |
| return instance.runHooks('beforeStretchingColumnWidth', stretchedWidth, column); |
| }, |
| viewportRowCalculatorOverride: function(calc) { |
| var rows = instance.countRows(); |
| var viewportOffset = that.settings.viewportRowRenderingOffset; |
| if (viewportOffset === 'auto' && that.settings.fixedRowsTop) { |
| viewportOffset = 10; |
| } |
| if (typeof viewportOffset === 'number') { |
| calc.startRow = Math.max(calc.startRow - viewportOffset, 0); |
| calc.endRow = Math.min(calc.endRow + viewportOffset, rows - 1); |
| } |
| if (viewportOffset === 'auto') { |
| var center = calc.startRow + calc.endRow - calc.startRow; |
| var offset = Math.ceil(center / rows * 12); |
| calc.startRow = Math.max(calc.startRow - offset, 0); |
| calc.endRow = Math.min(calc.endRow + offset, rows - 1); |
| } |
| instance.runHooks('afterViewportRowCalculatorOverride', calc); |
| }, |
| viewportColumnCalculatorOverride: function(calc) { |
| var cols = instance.countCols(); |
| var viewportOffset = that.settings.viewportColumnRenderingOffset; |
| if (viewportOffset === 'auto' && that.settings.fixedColumnsLeft) { |
| viewportOffset = 10; |
| } |
| if (typeof viewportOffset === 'number') { |
| calc.startColumn = Math.max(calc.startColumn - viewportOffset, 0); |
| calc.endColumn = Math.min(calc.endColumn + viewportOffset, cols - 1); |
| } |
| if (viewportOffset === 'auto') { |
| var center = calc.startColumn + calc.endColumn - calc.startColumn; |
| var offset = Math.ceil(center / cols * 12); |
| calc.startRow = Math.max(calc.startColumn - offset, 0); |
| calc.endColumn = Math.min(calc.endColumn + offset, cols - 1); |
| } |
| instance.runHooks('afterViewportColumnCalculatorOverride', calc); |
| }, |
| rowHeaderWidth: function() { |
| return that.settings.rowHeaderWidth; |
| }, |
| columnHeaderHeight: function() { |
| var columnHeaderHeight = instance.runHooks('modifyColumnHeaderHeight'); |
| return that.settings.columnHeaderHeight || columnHeaderHeight; |
| } |
| }; |
| Handsontable.hooks.run(instance, 'beforeInitWalkontable', walkontableConfig); |
| this.wt = new Walkontable(walkontableConfig); |
| this.activeWt = this.wt; |
| this.eventManager.addEventListener(that.wt.wtTable.spreader, 'mousedown', function(event) { |
| if (event.target === that.wt.wtTable.spreader && event.which === 3) { |
| stopPropagation(event); |
| } |
| }); |
| this.eventManager.addEventListener(that.wt.wtTable.spreader, 'contextmenu', function(event) { |
| if (event.target === that.wt.wtTable.spreader && event.which === 3) { |
| stopPropagation(event); |
| } |
| }); |
| this.eventManager.addEventListener(document.documentElement, 'click', function() { |
| if (that.settings.observeDOMVisibility) { |
| if (that.wt.drawInterrupted) { |
| that.instance.forceFullRender = true; |
| that.render(); |
| } |
| } |
| }); |
| } |
| TableView.prototype.isTextSelectionAllowed = function(el) { |
| if (isInput(el)) { |
| return true; |
| } |
| var isChildOfTableBody = isChildOf(el, this.instance.view.wt.wtTable.spreader); |
| if (this.settings.fragmentSelection === true && isChildOfTableBody) { |
| return true; |
| } |
| if (this.settings.fragmentSelection === 'cell' && this.isSelectedOnlyCell() && isChildOfTableBody) { |
| return true; |
| } |
| if (!this.settings.fragmentSelection && this.isCellEdited() && this.isSelectedOnlyCell()) { |
| return true; |
| } |
| return false; |
| }; |
| TableView.prototype.isSelectedOnlyCell = function() { |
| var $__8 = this.instance.getSelected() || [], |
| row = $__8[0], |
| col = $__8[1], |
| rowEnd = $__8[2], |
| colEnd = $__8[3]; |
| return row !== void 0 && row === rowEnd && col === colEnd; |
| }; |
| TableView.prototype.isCellEdited = function() { |
| var activeEditor = this.instance.getActiveEditor(); |
| return activeEditor && activeEditor.isOpened(); |
| }; |
| TableView.prototype.beforeRender = function(force) { |
| if (force) { |
| Handsontable.hooks.run(this.instance, 'beforeRender', this.instance.forceFullRender); |
| } |
| }; |
| TableView.prototype.onDraw = function(force) { |
| if (force) { |
| Handsontable.hooks.run(this.instance, 'afterRender', this.instance.forceFullRender); |
| } |
| }; |
| TableView.prototype.render = function() { |
| this.wt.draw(!this.instance.forceFullRender); |
| this.instance.forceFullRender = false; |
| this.instance.renderCall = false; |
| }; |
| TableView.prototype.getCellAtCoords = function(coords, topmost) { |
| var td = this.wt.getCell(coords, topmost); |
| if (td < 0) { |
| return null; |
| } else { |
| return td; |
| } |
| }; |
| TableView.prototype.scrollViewport = function(coords) { |
| this.wt.scrollViewport(coords); |
| }; |
| TableView.prototype.appendRowHeader = function(row, TH) { |
| if (TH.firstChild) { |
| var container = TH.firstChild; |
| if (!hasClass(container, 'relative')) { |
| empty(TH); |
| this.appendRowHeader(row, TH); |
| return; |
| } |
| this.updateCellHeader(container.querySelector('.rowHeader'), row, this.instance.getRowHeader); |
| } else { |
| var div = document.createElement('div'); |
| var span = document.createElement('span'); |
| div.className = 'relative'; |
| span.className = 'rowHeader'; |
| this.updateCellHeader(span, row, this.instance.getRowHeader); |
| div.appendChild(span); |
| TH.appendChild(div); |
| } |
| Handsontable.hooks.run(this.instance, 'afterGetRowHeader', row, TH); |
| }; |
| TableView.prototype.appendColHeader = function(col, TH) { |
| if (TH.firstChild) { |
| var container = TH.firstChild; |
| if (hasClass(container, 'relative')) { |
| this.updateCellHeader(container.querySelector('.colHeader'), col, this.instance.getColHeader); |
| } else { |
| empty(TH); |
| this.appendColHeader(col, TH); |
| } |
| } else { |
| var div = document.createElement('div'); |
| var span = document.createElement('span'); |
| div.className = 'relative'; |
| span.className = 'colHeader'; |
| this.updateCellHeader(span, col, this.instance.getColHeader); |
| div.appendChild(span); |
| TH.appendChild(div); |
| } |
| Handsontable.hooks.run(this.instance, 'afterGetColHeader', col, TH); |
| }; |
| TableView.prototype.updateCellHeader = function(element, index, content) { |
| var renderedIndex = index; |
| var parentOverlay = this.wt.wtOverlays.getParentOverlay(element) || this.wt; |
| if (element.parentNode) { |
| if (hasClass(element, 'colHeader')) { |
| renderedIndex = parentOverlay.wtTable.columnFilter.sourceToRendered(index); |
| } else if (hasClass(element, 'rowHeader')) { |
| renderedIndex = parentOverlay.wtTable.rowFilter.sourceToRendered(index); |
| } |
| } |
| if (renderedIndex > -1) { |
| fastInnerHTML(element, content(index)); |
| } else { |
| fastInnerText(element, String.fromCharCode(160)); |
| addClass(element, 'cornerHeader'); |
| } |
| }; |
| TableView.prototype.maximumVisibleElementWidth = function(leftOffset) { |
| var workspaceWidth = this.wt.wtViewport.getWorkspaceWidth(); |
| var maxWidth = workspaceWidth - leftOffset; |
| return maxWidth > 0 ? maxWidth : 0; |
| }; |
| TableView.prototype.maximumVisibleElementHeight = function(topOffset) { |
| var workspaceHeight = this.wt.wtViewport.getWorkspaceHeight(); |
| var maxHeight = workspaceHeight - topOffset; |
| return maxHeight > 0 ? maxHeight : 0; |
| }; |
| TableView.prototype.mainViewIsActive = function() { |
| return this.wt === this.activeWt; |
| }; |
| TableView.prototype.destroy = function() { |
| this.wt.destroy(); |
| this.eventManager.destroy(); |
| }; |
| ; |
| |
| //# |
| },{"3rdparty/walkontable/src/cell/coords":6,"3rdparty/walkontable/src/core":8,"3rdparty/walkontable/src/selection":19,"browser":24,"eventManager":42,"helpers/dom/element":47,"helpers/dom/event":48}],115:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| GhostTable: {get: function() { |
| return GhostTable; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $___46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47_helpers_47_array__, |
| $___46__46__47_helpers_47_object__, |
| $___46__46__47_helpers_47_number__, |
| $___46__46__47_helpers_47_mixed__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__1.addClass, |
| outerHeight = $__1.outerHeight, |
| outerWidth = $__1.outerWidth; |
| var arrayEach = ($___46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47_helpers_47_array__ && $___46__46__47_helpers_47_array__.__esModule && $___46__46__47_helpers_47_array__ || {default: $___46__46__47_helpers_47_array__}).arrayEach; |
| var objectEach = ($___46__46__47_helpers_47_object__ = _dereq_("helpers/object"), $___46__46__47_helpers_47_object__ && $___46__46__47_helpers_47_object__.__esModule && $___46__46__47_helpers_47_object__ || {default: $___46__46__47_helpers_47_object__}).objectEach; |
| var rangeEach = ($___46__46__47_helpers_47_number__ = _dereq_("helpers/number"), $___46__46__47_helpers_47_number__ && $___46__46__47_helpers_47_number__.__esModule && $___46__46__47_helpers_47_number__ || {default: $___46__46__47_helpers_47_number__}).rangeEach; |
| var stringify = ($___46__46__47_helpers_47_mixed__ = _dereq_("helpers/mixed"), $___46__46__47_helpers_47_mixed__ && $___46__46__47_helpers_47_mixed__.__esModule && $___46__46__47_helpers_47_mixed__ || {default: $___46__46__47_helpers_47_mixed__}).stringify; |
| var GhostTable = function GhostTable(hotInstance) { |
| this.hot = hotInstance; |
| this.container = null; |
| this.injected = false; |
| this.rows = []; |
| this.columns = []; |
| this.samples = null; |
| this.settings = {useHeaders: true}; |
| }; |
| ($traceurRuntime.createClass)(GhostTable, { |
| addRow: function(row, samples) { |
| if (this.columns.length) { |
| throw new Error('Doesn\'t support multi-dimensional table'); |
| } |
| if (!this.rows.length) { |
| this.container = this.createContainer(this.hot.rootElement.className); |
| } |
| var rowObject = {row: row}; |
| this.rows.push(rowObject); |
| this.samples = samples; |
| this.table = this.createTable(this.hot.table.className); |
| this.table.colGroup.appendChild(this.createColGroupsCol()); |
| this.table.tr.appendChild(this.createRow(row)); |
| this.container.container.appendChild(this.table.fragment); |
| rowObject.table = this.table.table; |
| }, |
| addColumnHeadersRow: function(samples) { |
| if (this.hot.getColHeader(0) != null) { |
| var rowObject = {row: -1}; |
| this.rows.push(rowObject); |
| this.container = this.createContainer(this.hot.rootElement.className); |
| this.samples = samples; |
| this.table = this.createTable(this.hot.table.className); |
| this.table.colGroup.appendChild(this.createColGroupsCol()); |
| this.table.tHead.appendChild(this.createColumnHeadersRow()); |
| this.container.container.appendChild(this.table.fragment); |
| rowObject.table = this.table.table; |
| } |
| }, |
| addColumn: function(column, samples) { |
| if (this.rows.length) { |
| throw new Error('Doesn\'t support multi-dimensional table'); |
| } |
| if (!this.columns.length) { |
| this.container = this.createContainer(this.hot.rootElement.className); |
| } |
| var columnObject = {col: column}; |
| this.columns.push(columnObject); |
| this.samples = samples; |
| this.table = this.createTable(this.hot.table.className); |
| if (this.getSetting('useHeaders') && this.hot.getColHeader(column) !== null) { |
| this.hot.view.appendColHeader(column, this.table.th); |
| } |
| this.table.tBody.appendChild(this.createCol(column)); |
| this.container.container.appendChild(this.table.fragment); |
| columnObject.table = this.table.table; |
| }, |
| getHeights: function(callback) { |
| if (!this.injected) { |
| this.injectTable(); |
| } |
| arrayEach(this.rows, (function(row) { |
| callback(row.row, outerHeight(row.table) - 1); |
| })); |
| }, |
| getWidths: function(callback) { |
| if (!this.injected) { |
| this.injectTable(); |
| } |
| arrayEach(this.columns, (function(column) { |
| callback(column.col, outerWidth(column.table)); |
| })); |
| }, |
| setSettings: function(settings) { |
| this.settings = settings; |
| }, |
| setSetting: function(name, value) { |
| if (!this.settings) { |
| this.settings = {}; |
| } |
| this.settings[name] = value; |
| }, |
| getSettings: function() { |
| return this.settings; |
| }, |
| getSetting: function(name) { |
| if (this.settings) { |
| return this.settings[name]; |
| } else { |
| return null; |
| } |
| }, |
| createColGroupsCol: function() { |
| var $__6 = this; |
| var d = document; |
| var fragment = d.createDocumentFragment(); |
| if (this.hot.hasRowHeaders()) { |
| fragment.appendChild(this.createColElement(-1)); |
| } |
| this.samples.forEach((function(sample) { |
| arrayEach(sample.strings, (function(string) { |
| fragment.appendChild($__6.createColElement(string.col)); |
| })); |
| })); |
| return fragment; |
| }, |
| createRow: function(row) { |
| var $__6 = this; |
| var d = document; |
| var fragment = d.createDocumentFragment(); |
| var th = d.createElement('th'); |
| if (this.hot.hasRowHeaders()) { |
| this.hot.view.appendRowHeader(row, th); |
| fragment.appendChild(th); |
| } |
| this.samples.forEach((function(sample) { |
| arrayEach(sample.strings, (function(string) { |
| var column = string.col; |
| var cellProperties = $__6.hot.getCellMeta(row, column); |
| cellProperties.col = column; |
| cellProperties.row = row; |
| var renderer = $__6.hot.getCellRenderer(cellProperties); |
| var td = d.createElement('td'); |
| renderer($__6.hot, td, row, column, $__6.hot.colToProp(column), string.value, cellProperties); |
| fragment.appendChild(td); |
| })); |
| })); |
| return fragment; |
| }, |
| createColumnHeadersRow: function() { |
| var $__6 = this; |
| var d = document; |
| var fragment = d.createDocumentFragment(); |
| if (this.hot.hasRowHeaders()) { |
| var th = d.createElement('th'); |
| this.hot.view.appendColHeader(-1, th); |
| fragment.appendChild(th); |
| } |
| this.samples.forEach((function(sample) { |
| arrayEach(sample.strings, (function(string) { |
| var column = string.col; |
| var th = d.createElement('th'); |
| $__6.hot.view.appendColHeader(column, th); |
| fragment.appendChild(th); |
| })); |
| })); |
| return fragment; |
| }, |
| createCol: function(column) { |
| var $__6 = this; |
| var d = document; |
| var fragment = d.createDocumentFragment(); |
| this.samples.forEach((function(sample) { |
| arrayEach(sample.strings, (function(string) { |
| var row = string.row; |
| var cellProperties = $__6.hot.getCellMeta(row, column); |
| cellProperties.col = column; |
| cellProperties.row = row; |
| var renderer = $__6.hot.getCellRenderer(cellProperties); |
| var td = d.createElement('td'); |
| var tr = d.createElement('tr'); |
| renderer($__6.hot, td, row, column, $__6.hot.colToProp(column), string.value, cellProperties); |
| tr.appendChild(td); |
| fragment.appendChild(tr); |
| })); |
| })); |
| return fragment; |
| }, |
| clean: function() { |
| this.rows.length = 0; |
| this.rows[-1] = void 0; |
| this.columns.length = 0; |
| if (this.samples) { |
| this.samples.clear(); |
| } |
| this.samples = null; |
| this.removeTable(); |
| }, |
| injectTable: function() { |
| var parent = arguments[0] !== (void 0) ? arguments[0] : null; |
| if (!this.injected) { |
| (parent || this.hot.rootElement).appendChild(this.container.fragment); |
| this.injected = true; |
| } |
| }, |
| removeTable: function() { |
| if (this.injected && this.container.container.parentNode) { |
| this.container.container.parentNode.removeChild(this.container.container); |
| this.container = null; |
| this.injected = false; |
| } |
| }, |
| createColElement: function(column) { |
| var d = document; |
| var col = d.createElement('col'); |
| col.style.width = this.hot.view.wt.wtTable.getStretchedColumnWidth(column) + 'px'; |
| return col; |
| }, |
| createTable: function() { |
| var className = arguments[0] !== (void 0) ? arguments[0] : ''; |
| var d = document; |
| var fragment = d.createDocumentFragment(); |
| var table = d.createElement('table'); |
| var tHead = d.createElement('thead'); |
| var tBody = d.createElement('tbody'); |
| var colGroup = d.createElement('colgroup'); |
| var tr = d.createElement('tr'); |
| var th = d.createElement('th'); |
| if (this.isVertical()) { |
| table.appendChild(colGroup); |
| } |
| if (this.isHorizontal()) { |
| tr.appendChild(th); |
| tHead.appendChild(tr); |
| table.style.tableLayout = 'auto'; |
| table.style.width = 'auto'; |
| } |
| table.appendChild(tHead); |
| if (this.isVertical()) { |
| tBody.appendChild(tr); |
| } |
| table.appendChild(tBody); |
| addClass(table, className); |
| fragment.appendChild(table); |
| return { |
| fragment: fragment, |
| table: table, |
| tHead: tHead, |
| tBody: tBody, |
| colGroup: colGroup, |
| tr: tr, |
| th: th |
| }; |
| }, |
| createContainer: function() { |
| var className = arguments[0] !== (void 0) ? arguments[0] : ''; |
| var d = document; |
| var fragment = d.createDocumentFragment(); |
| var container = d.createElement('div'); |
| className = 'htGhostTable htAutoSize ' + className.trim(); |
| addClass(container, className); |
| fragment.appendChild(container); |
| return { |
| fragment: fragment, |
| container: container |
| }; |
| }, |
| isVertical: function() { |
| return this.rows.length && !this.columns.length ? true : false; |
| }, |
| isHorizontal: function() { |
| return this.columns.length && !this.rows.length ? true : false; |
| } |
| }, {}); |
| ; |
| Handsontable.utils.GhostTable = GhostTable; |
| |
| //# |
| },{"browser":24,"helpers/array":43,"helpers/dom/element":47,"helpers/mixed":51,"helpers/number":52,"helpers/object":53}],116:[function(_dereq_,module,exports){ |
| "use strict"; |
| Object.defineProperties(exports, { |
| Interval: {get: function() { |
| return Interval; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $___46__46__47_helpers_47_feature__, |
| $___46__46__47_helpers_47_array__, |
| $___46__46__47_helpers_47_object__, |
| $___46__46__47_helpers_47_number__, |
| $___46__46__47_helpers_47_mixed__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47_helpers_47_feature__ = _dereq_("helpers/feature"), $___46__46__47_helpers_47_feature__ && $___46__46__47_helpers_47_feature__.__esModule && $___46__46__47_helpers_47_feature__ || {default: $___46__46__47_helpers_47_feature__}), |
| requestAnimationFrame = $__1.requestAnimationFrame, |
| cancelAnimationFrame = $__1.cancelAnimationFrame; |
| var arrayEach = ($___46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47_helpers_47_array__ && $___46__46__47_helpers_47_array__.__esModule && $___46__46__47_helpers_47_array__ || {default: $___46__46__47_helpers_47_array__}).arrayEach; |
| var objectEach = ($___46__46__47_helpers_47_object__ = _dereq_("helpers/object"), $___46__46__47_helpers_47_object__ && $___46__46__47_helpers_47_object__.__esModule && $___46__46__47_helpers_47_object__ || {default: $___46__46__47_helpers_47_object__}).objectEach; |
| var rangeEach = ($___46__46__47_helpers_47_number__ = _dereq_("helpers/number"), $___46__46__47_helpers_47_number__ && $___46__46__47_helpers_47_number__.__esModule && $___46__46__47_helpers_47_number__ || {default: $___46__46__47_helpers_47_number__}).rangeEach; |
| var stringify = ($___46__46__47_helpers_47_mixed__ = _dereq_("helpers/mixed"), $___46__46__47_helpers_47_mixed__ && $___46__46__47_helpers_47_mixed__.__esModule && $___46__46__47_helpers_47_mixed__ || {default: $___46__46__47_helpers_47_mixed__}).stringify; |
| var Interval = function Interval(func, delay) { |
| var $__6 = this; |
| this.timer = null; |
| this.func = func; |
| this.delay = parseDelay(delay); |
| this.stopped = true; |
| this._then = null; |
| this._callback = (function() { |
| return $__6.__callback(); |
| }); |
| }; |
| var $Interval = Interval; |
| ($traceurRuntime.createClass)(Interval, { |
| start: function() { |
| if (this.stopped) { |
| this._then = Date.now(); |
| this.stopped = false; |
| this.timer = requestAnimationFrame(this._callback); |
| } |
| return this; |
| }, |
| stop: function() { |
| if (!this.stopped) { |
| this.stopped = true; |
| cancelAnimationFrame(this.timer); |
| this.timer = null; |
| } |
| return this; |
| }, |
| __callback: function() { |
| this.timer = requestAnimationFrame(this._callback); |
| if (this.delay) { |
| var now = Date.now(); |
| var elapsed = now - this._then; |
| if (elapsed > this.delay) { |
| this._then = now - (elapsed % this.delay); |
| this.func(); |
| } |
| } else { |
| this.func(); |
| } |
| } |
| }, {create: function(func, delay) { |
| return new $Interval(func, delay); |
| }}); |
| ; |
| function parseDelay(delay) { |
| if (typeof delay === 'string' && /fps$/.test(delay)) { |
| delay = 1000 / parseInt(delay.replace('fps', '') || 0, 10); |
| } |
| return delay; |
| } |
| Handsontable.utils.Interval = Interval; |
| |
| //# |
| },{"browser":24,"helpers/array":43,"helpers/feature":49,"helpers/mixed":51,"helpers/number":52,"helpers/object":53}],117:[function(_dereq_,module,exports){ |
| "use strict"; |
| var $__8; |
| Object.defineProperties(exports, { |
| SamplesGenerator: {get: function() { |
| return SamplesGenerator; |
| }}, |
| __esModule: {value: true} |
| }); |
| var $___46__46__47_browser__, |
| $___46__46__47_helpers_47_dom_47_element__, |
| $___46__46__47_helpers_47_array__, |
| $___46__46__47_helpers_47_object__, |
| $___46__46__47_helpers_47_number__, |
| $___46__46__47_helpers_47_mixed__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var $__1 = ($___46__46__47_helpers_47_dom_47_element__ = _dereq_("helpers/dom/element"), $___46__46__47_helpers_47_dom_47_element__ && $___46__46__47_helpers_47_dom_47_element__.__esModule && $___46__46__47_helpers_47_dom_47_element__ || {default: $___46__46__47_helpers_47_dom_47_element__}), |
| addClass = $__1.addClass, |
| outerHeight = $__1.outerHeight, |
| outerWidth = $__1.outerWidth; |
| var arrayEach = ($___46__46__47_helpers_47_array__ = _dereq_("helpers/array"), $___46__46__47_helpers_47_array__ && $___46__46__47_helpers_47_array__.__esModule && $___46__46__47_helpers_47_array__ || {default: $___46__46__47_helpers_47_array__}).arrayEach; |
| var $__3 = ($___46__46__47_helpers_47_object__ = _dereq_("helpers/object"), $___46__46__47_helpers_47_object__ && $___46__46__47_helpers_47_object__.__esModule && $___46__46__47_helpers_47_object__ || {default: $___46__46__47_helpers_47_object__}), |
| objectEach = $__3.objectEach, |
| isObject = $__3.isObject; |
| var rangeEach = ($___46__46__47_helpers_47_number__ = _dereq_("helpers/number"), $___46__46__47_helpers_47_number__ && $___46__46__47_helpers_47_number__.__esModule && $___46__46__47_helpers_47_number__ || {default: $___46__46__47_helpers_47_number__}).rangeEach; |
| var stringify = ($___46__46__47_helpers_47_mixed__ = _dereq_("helpers/mixed"), $___46__46__47_helpers_47_mixed__ && $___46__46__47_helpers_47_mixed__.__esModule && $___46__46__47_helpers_47_mixed__ || {default: $___46__46__47_helpers_47_mixed__}).stringify; |
| var SamplesGenerator = function SamplesGenerator(dataFactory) { |
| this.samples = null; |
| this.dataFactory = dataFactory; |
| this.customSampleCount = null; |
| }; |
| var $SamplesGenerator = SamplesGenerator; |
| ($traceurRuntime.createClass)(SamplesGenerator, ($__8 = {}, Object.defineProperty($__8, "getSampleCount", { |
| value: function() { |
| if (this.customSampleCount) { |
| return this.customSampleCount; |
| } |
| return $SamplesGenerator.SAMPLE_COUNT; |
| }, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__8, "generateRowSamples", { |
| value: function(rowRange, colRange) { |
| return this.generateSamples('row', colRange, rowRange); |
| }, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__8, "generateColumnSamples", { |
| value: function(colRange, rowRange) { |
| return this.generateSamples('col', rowRange, colRange); |
| }, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__8, "generateSamples", { |
| value: function(type, range, specifierRange) { |
| var $__6 = this; |
| var samples = new Map(); |
| if (typeof specifierRange === 'number') { |
| specifierRange = { |
| from: specifierRange, |
| to: specifierRange |
| }; |
| } |
| rangeEach(specifierRange.from, specifierRange.to, (function(index) { |
| var sample = $__6.generateSample(type, range, index); |
| samples.set(index, sample); |
| })); |
| return samples; |
| }, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__8, "generateSample", { |
| value: function(type, range, specifierValue) { |
| var $__6 = this; |
| var samples = new Map(); |
| var sampledValues = []; |
| var length; |
| rangeEach(range.from, range.to, (function(index) { |
| var $__8; |
| var value; |
| if (type === 'row') { |
| value = $__6.dataFactory(specifierValue, index); |
| } else if (type === 'col') { |
| value = $__6.dataFactory(index, specifierValue); |
| } else { |
| throw new Error('Unsupported sample type'); |
| } |
| if (isObject(value)) { |
| length = Object.keys(value).length; |
| } else if (Array.isArray(value)) { |
| length = value.length; |
| } else { |
| length = stringify(value).length; |
| } |
| if (!samples.has(length)) { |
| samples.set(length, { |
| needed: $__6.getSampleCount(), |
| strings: [] |
| }); |
| } |
| var sample = samples.get(length); |
| if (sample.needed) { |
| var duplicate = sampledValues.indexOf(value) > -1; |
| if (!duplicate) { |
| var computedKey = type === 'row' ? 'col' : 'row'; |
| sample.strings.push(($__8 = {}, Object.defineProperty($__8, "value", { |
| value: value, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), Object.defineProperty($__8, computedKey, { |
| value: index, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), $__8)); |
| sampledValues.push(value); |
| sample.needed--; |
| } |
| } |
| })); |
| return samples; |
| }, |
| configurable: true, |
| enumerable: true, |
| writable: true |
| }), $__8), {get SAMPLE_COUNT() { |
| return 3; |
| }}); |
| ; |
| Handsontable.utils.SamplesGenerator = SamplesGenerator; |
| |
| //# |
| },{"browser":24,"helpers/array":43,"helpers/dom/element":47,"helpers/mixed":51,"helpers/number":52,"helpers/object":53}],118:[function(_dereq_,module,exports){ |
| "use strict"; |
| var $___46__46__47_browser__, |
| $___46__46__47_helpers_47_mixed__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var stringify = ($___46__46__47_helpers_47_mixed__ = _dereq_("helpers/mixed"), $___46__46__47_helpers_47_mixed__ && $___46__46__47_helpers_47_mixed__.__esModule && $___46__46__47_helpers_47_mixed__ || {default: $___46__46__47_helpers_47_mixed__}).stringify; |
| Handsontable.AutocompleteValidator = function(value, callback) { |
| if (value == null) { |
| value = ''; |
| } |
| if (this.allowEmpty && value === '') { |
| callback(true); |
| return; |
| } |
| if (this.strict && this.source) { |
| if (typeof this.source === 'function') { |
| this.source(value, process(value, callback)); |
| } else { |
| process(value, callback)(this.source); |
| } |
| } else { |
| callback(true); |
| } |
| }; |
| function process(value, callback) { |
| var originalVal = value; |
| var lowercaseVal = typeof originalVal === 'string' ? originalVal.toLowerCase() : null; |
| return function(source) { |
| var found = false; |
| for (var s = 0, |
| slen = source.length; s < slen; s++) { |
| if (originalVal === source[s]) { |
| found = true; |
| break; |
| } else if (lowercaseVal === stringify(source[s]).toLowerCase()) { |
| found = true; |
| break; |
| } |
| } |
| callback(found); |
| }; |
| } |
| |
| //# |
| },{"browser":24,"helpers/mixed":51}],119:[function(_dereq_,module,exports){ |
| "use strict"; |
| var $___46__46__47_browser__, |
| $__moment__, |
| $___46__46__47_helpers_47_date__, |
| $___46__46__47_editors__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var moment = ($__moment__ = _dereq_("moment"), $__moment__ && $__moment__.__esModule && $__moment__ || {default: $__moment__}).default; |
| var getNormalizedDate = ($___46__46__47_helpers_47_date__ = _dereq_("../helpers/date"), $___46__46__47_helpers_47_date__ && $___46__46__47_helpers_47_date__.__esModule && $___46__46__47_helpers_47_date__ || {default: $___46__46__47_helpers_47_date__}).getNormalizedDate; |
| var getEditor = ($___46__46__47_editors__ = _dereq_("editors"), $___46__46__47_editors__ && $___46__46__47_editors__.__esModule && $___46__46__47_editors__ || {default: $___46__46__47_editors__}).getEditor; |
| Handsontable.DateValidator = function(value, callback) { |
| var valid = true; |
| var dateEditor = getEditor('date', this.instance); |
| if (value == null) { |
| value = ''; |
| } |
| var isValidDate = moment(new Date(value)).isValid(); |
| var isValidFormat = moment(value, this.dateFormat || dateEditor.defaultDateFormat, true).isValid(); |
| if (this.allowEmpty && value === '') { |
| isValidDate = true; |
| isValidFormat = true; |
| } |
| if (!isValidDate) { |
| valid = false; |
| } |
| if (!isValidDate && isValidFormat) { |
| valid = true; |
| } |
| if (isValidDate && !isValidFormat) { |
| if (this.correctFormat === true) { |
| var correctedValue = correctFormat(value, this.dateFormat); |
| this.instance.setDataAtCell(this.row, this.col, correctedValue, 'dateValidator'); |
| valid = true; |
| } else { |
| valid = false; |
| } |
| } |
| callback(valid); |
| }; |
| var correctFormat = function correctFormat(value, dateFormat) { |
| var date = moment(getNormalizedDate(value)); |
| var year = date.format('YYYY'); |
| var yearNow = moment().format('YYYY'); |
| if (year.substr(0, 2) !== yearNow.substr(0, 2)) { |
| if (!value.match(new RegExp(year))) { |
| date.year(year.replace(year.substr(0, 2), yearNow.substr(0, 2))); |
| } |
| } else if (year.length > 4) { |
| date.year((date.year() + '').substr(0, 4)); |
| } |
| return date.format(dateFormat); |
| }; |
| |
| //# |
| },{"../helpers/date":46,"browser":24,"editors":30,"moment":"moment"}],120:[function(_dereq_,module,exports){ |
| "use strict"; |
| var $___46__46__47_browser__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| Handsontable.NumericValidator = function(value, callback) { |
| if (value == null) { |
| value = ''; |
| } |
| if (this.allowEmpty && value === '') { |
| callback(true); |
| } else if (value === '') { |
| callback(false); |
| } else { |
| callback(/^-?\d*(\.|\,)?\d*$/.test(value)); |
| } |
| }; |
| |
| //# |
| },{"browser":24}],121:[function(_dereq_,module,exports){ |
| "use strict"; |
| var $___46__46__47_browser__, |
| $__moment__; |
| var Handsontable = ($___46__46__47_browser__ = _dereq_("browser"), $___46__46__47_browser__ && $___46__46__47_browser__.__esModule && $___46__46__47_browser__ || {default: $___46__46__47_browser__}).default; |
| var moment = ($__moment__ = _dereq_("moment"), $__moment__ && $__moment__.__esModule && $__moment__ || {default: $__moment__}).default; |
| var STRICT_FORMATS = ['YYYY-MM-DDTHH:mm:ss.SSSZ', 'X', 'x']; |
| Handsontable.TimeValidator = function(value, callback) { |
| var valid = true; |
| var timeFormat = this.timeFormat || 'h:mm:ss a'; |
| if (value === null) { |
| value = ''; |
| } |
| value = /^\d{3,}$/.test(value) ? parseInt(value, 10) : value; |
| var twoDigitValue = /^\d{1,2}$/.test(value); |
| if (twoDigitValue) { |
| value = value + ':00'; |
| } |
| var date = moment(value, STRICT_FORMATS, true).isValid() ? moment(value) : moment(value, timeFormat); |
| var isValidTime = date.isValid(); |
| var isValidFormat = moment(value, timeFormat, true).isValid() && !twoDigitValue; |
| if (this.allowEmpty && value === '') { |
| isValidTime = true; |
| isValidFormat = true; |
| } |
| if (!isValidTime) { |
| valid = false; |
| } |
| if (!isValidTime && isValidFormat) { |
| valid = true; |
| } |
| if (isValidTime && !isValidFormat) { |
| if (this.correctFormat === true) { |
| var correctedValue = date.format(timeFormat); |
| this.instance.setDataAtCell(this.row, this.col, correctedValue, 'timeValidator'); |
| valid = true; |
| } else { |
| valid = false; |
| } |
| } |
| callback(valid); |
| }; |
| |
| //# |
| },{"browser":24,"moment":"moment"}],"SheetClip":[function(_dereq_,module,exports){ |
| /** |
| * SheetClip - Spreadsheet Clipboard Parser |
| * version 0.2 |
| * |
| * This tiny library transforms JavaScript arrays to strings that are pasteable by LibreOffice, OpenOffice, |
| * Google Docs and Microsoft Excel. |
| * |
| * Copyright 2012, Marcin Warpechowski |
| * Licensed under the MIT license. |
| * http://github.com/warpech/sheetclip/ |
| */ |
| /*jslint white: true*/ |
| (function (global) { |
| "use strict"; |
| |
| function countQuotes(str) { |
| return str.split('"').length - 1; |
| } |
| |
| var SheetClip = { |
| /** |
| * Decode spreadsheet string into array |
| * |
| * @param {String} str |
| * @returns {Array} |
| */ |
| parse: function (str) { |
| var r, rLen, rows, arr = [], a = 0, c, cLen, multiline, last; |
| |
| rows = str.split('\n'); |
| |
| if (rows.length > 1 && rows[rows.length - 1] === '') { |
| rows.pop(); |
| } |
| for (r = 0, rLen = rows.length; r < rLen; r += 1) { |
| rows[r] = rows[r].split('\t'); |
| |
| for (c = 0, cLen = rows[r].length; c < cLen; c += 1) { |
| if (!arr[a]) { |
| arr[a] = []; |
| } |
| if (multiline && c === 0) { |
| last = arr[a].length - 1; |
| arr[a][last] = arr[a][last] + '\n' + rows[r][0]; |
| |
| if (multiline && (countQuotes(rows[r][0]) & 1)) { //& 1 is a bitwise way of performing mod 2 |
| multiline = false; |
| arr[a][last] = arr[a][last].substring(0, arr[a][last].length - 1).replace(/""/g, '"'); |
| } |
| } |
| else { |
| if (c === cLen - 1 && rows[r][c].indexOf('"') === 0 && (countQuotes(rows[r][c]) & 1)) { |
| arr[a].push(rows[r][c].substring(1).replace(/""/g, '"')); |
| multiline = true; |
| } |
| else { |
| arr[a].push(rows[r][c].replace(/""/g, '"')); |
| multiline = false; |
| } |
| } |
| } |
| if (!multiline) { |
| a += 1; |
| } |
| } |
| |
| return arr; |
| }, |
| |
| /** |
| * Encode array into valid spreadsheet string |
| * |
| * @param arr |
| * @returns {String} |
| */ |
| stringify: function (arr) { |
| var r, rLen, c, cLen, str = '', val; |
| |
| for (r = 0, rLen = arr.length; r < rLen; r += 1) { |
| cLen = arr[r].length; |
| |
| for (c = 0; c < cLen; c += 1) { |
| if (c > 0) { |
| str += '\t'; |
| } |
| val = arr[r][c]; |
| |
| if (typeof val === 'string') { |
| if (val.indexOf('\n') > -1) { |
| str += '"' + val.replace(/"/g, '""') + '"'; |
| } |
| else { |
| str += val; |
| } |
| } |
| else if (val === null || val === void 0) { // void 0 resolves to undefined |
| str += ''; |
| } |
| else { |
| str += val; |
| } |
| } |
| str += '\n'; |
| } |
| |
| return str; |
| } |
| }; |
| |
| if (typeof exports !== 'undefined') { |
| exports.parse = SheetClip.parse; |
| exports.stringify = SheetClip.stringify; |
| } else { |
| global.SheetClip = SheetClip; |
| } |
| }(window)); |
| |
| },{}],"autoResize":[function(_dereq_,module,exports){ |
| /** |
| * autoResize - resizes a DOM element to the width and height of another DOM element |
| * |
| * Copyright 2014, Marcin Warpechowski |
| * Licensed under the MIT license |
| */ |
| |
| |
| function autoResize() { |
| var defaults = { |
| minHeight: 200, |
| maxHeight: 300, |
| minWidth: 100, |
| maxWidth: 300 |
| }, |
| el, |
| body = document.body, |
| text = document.createTextNode(''), |
| span = document.createElement('SPAN'), |
| observe = function (element, event, handler) { |
| if (window.attachEvent) { |
| element.attachEvent('on' + event, handler); |
| } else { |
| element.addEventListener(event, handler, false); |
| } |
| }, |
| unObserve = function (element, event, handler) { |
| if (window.removeEventListener) { |
| element.removeEventListener(event, handler, false); |
| } else { |
| element.detachEvent('on' + event, handler); |
| } |
| }, |
| resize = function (newChar) { |
| var width, scrollHeight; |
| |
| if (!newChar) { |
| newChar = ""; |
| } else if (!/^[a-zA-Z \.,\\\/\|0-9]$/.test(newChar)) { |
| newChar = "."; |
| } |
| |
| if (text.textContent !== void 0) { |
| text.textContent = el.value + newChar; |
| } |
| else { |
| text.data = el.value + newChar; //IE8 |
| } |
| span.style.fontSize = getComputedStyle(el).fontSize; |
| span.style.fontFamily = getComputedStyle(el).fontFamily; |
| span.style.whiteSpace = "pre"; |
| |
| body.appendChild(span); |
| width = span.clientWidth + 2; |
| body.removeChild(span); |
| |
| el.style.height = defaults.minHeight + 'px'; |
| |
| if (defaults.minWidth > width) { |
| el.style.width = defaults.minWidth + 'px'; |
| |
| } else if (width > defaults.maxWidth) { |
| el.style.width = defaults.maxWidth + 'px'; |
| |
| } else { |
| el.style.width = width + 'px'; |
| } |
| scrollHeight = el.scrollHeight ? el.scrollHeight - 1 : 0; |
| |
| if (defaults.minHeight > scrollHeight) { |
| el.style.height = defaults.minHeight + 'px'; |
| |
| } else if (defaults.maxHeight < scrollHeight) { |
| el.style.height = defaults.maxHeight + 'px'; |
| el.style.overflowY = 'visible'; |
| |
| } else { |
| el.style.height = scrollHeight + 'px'; |
| } |
| }, |
| delayedResize = function () { |
| window.setTimeout(resize, 0); |
| }, |
| extendDefaults = function (config) { |
| |
| if (config && config.minHeight) { |
| if (config.minHeight == 'inherit') { |
| defaults.minHeight = el.clientHeight; |
| } else { |
| var minHeight = parseInt(config.minHeight); |
| if (!isNaN(minHeight)) { |
| defaults.minHeight = minHeight; |
| } |
| } |
| } |
| |
| if (config && config.maxHeight) { |
| if (config.maxHeight == 'inherit') { |
| defaults.maxHeight = el.clientHeight; |
| } else { |
| var maxHeight = parseInt(config.maxHeight); |
| if (!isNaN(maxHeight)) { |
| defaults.maxHeight = maxHeight; |
| } |
| } |
| } |
| |
| if (config && config.minWidth) { |
| if (config.minWidth == 'inherit') { |
| defaults.minWidth = el.clientWidth; |
| } else { |
| var minWidth = parseInt(config.minWidth); |
| if (!isNaN(minWidth)) { |
| defaults.minWidth = minWidth; |
| } |
| } |
| } |
| |
| if (config && config.maxWidth) { |
| if (config.maxWidth == 'inherit') { |
| defaults.maxWidth = el.clientWidth; |
| } else { |
| var maxWidth = parseInt(config.maxWidth); |
| if (!isNaN(maxWidth)) { |
| defaults.maxWidth = maxWidth; |
| } |
| } |
| } |
| |
| if(!span.firstChild) { |
| span.className = "autoResize"; |
| span.style.display = 'inline-block'; |
| span.appendChild(text); |
| } |
| }, |
| init = function (el_, config, doObserve) { |
| el = el_; |
| extendDefaults(config); |
| |
| if (el.nodeName == 'TEXTAREA') { |
| |
| el.style.resize = 'none'; |
| el.style.overflowY = ''; |
| el.style.height = defaults.minHeight + 'px'; |
| el.style.minWidth = defaults.minWidth + 'px'; |
| el.style.maxWidth = defaults.maxWidth + 'px'; |
| el.style.overflowY = 'hidden'; |
| } |
| |
| if(doObserve) { |
| observe(el, 'change', resize); |
| observe(el, 'cut', delayedResize); |
| observe(el, 'paste', delayedResize); |
| observe(el, 'drop', delayedResize); |
| observe(el, 'keydown', delayedResize); |
| observe(el, 'focus', resize); |
| } |
| |
| resize(); |
| }; |
| |
| function getComputedStyle(element) { |
| return element.currentStyle || document.defaultView.getComputedStyle(element); |
| } |
| |
| return { |
| init: function (el_, config, doObserve) { |
| init(el_, config, doObserve); |
| }, |
| unObserve: function () { |
| unObserve(el, 'change', resize); |
| unObserve(el, 'cut', delayedResize); |
| unObserve(el, 'paste', delayedResize); |
| unObserve(el, 'drop', delayedResize); |
| unObserve(el, 'keydown', delayedResize); |
| unObserve(el, 'focus', resize); |
| }, |
| resize: resize |
| }; |
| } |
| |
| if (typeof exports !== 'undefined') { |
| module.exports = autoResize; |
| } |
| |
| },{}],"copyPaste":[function(_dereq_,module,exports){ |
| /** |
| * Creates a textarea that stays hidden on the page and gets focused when user presses CTRL while not having a form |
| * input focused. |
| * In future we may implement a better driver when better APIs are available. |
| * |
| * @constructor |
| * @private |
| */ |
| |
| var instance; |
| |
| function copyPaste() { |
| if (!instance) { |
| instance = new CopyPasteClass(); |
| |
| } else if (instance.hasBeenDestroyed()){ |
| instance.init(); |
| } |
| instance.refCounter++; |
| |
| return instance; |
| } |
| |
| if (typeof exports !== 'undefined') { |
| module.exports = copyPaste; |
| } |
| |
| function CopyPasteClass() { |
| this.refCounter = 0; |
| this.init(); |
| } |
| |
| CopyPasteClass.prototype.init = function () { |
| var |
| style, |
| parent; |
| |
| this.copyCallbacks = []; |
| this.cutCallbacks = []; |
| this.pasteCallbacks = []; |
| |
| // this.listenerElement = document.documentElement; |
| parent = document.body; |
| |
| if (document.getElementById('CopyPasteDiv')) { |
| this.elDiv = document.getElementById('CopyPasteDiv'); |
| this.elTextarea = this.elDiv.firstChild; |
| |
| } else { |
| this.elDiv = document.createElement('div'); |
| this.elDiv.id = 'CopyPasteDiv'; |
| style = this.elDiv.style; |
| style.position = 'fixed'; |
| style.top = '-10000px'; |
| style.left = '-10000px'; |
| parent.appendChild(this.elDiv); |
| |
| this.elTextarea = document.createElement('textarea'); |
| this.elTextarea.className = 'copyPaste'; |
| this.elTextarea.onpaste = function(event) { |
| var clipboardContents, |
| temp; |
| |
| if ('WebkitAppearance' in document.documentElement.style) { // chrome and safari |
| clipboardContents = event.clipboardData.getData("Text"); |
| |
| // Safari adds an additional newline to copied text |
| if (navigator.userAgent.indexOf('Safari') !== -1 && navigator.userAgent.indexOf('Chrome') === -1) { |
| temp = clipboardContents.split('\n'); |
| |
| if (temp[temp.length - 1] === '') { |
| temp.pop(); |
| } |
| clipboardContents = temp.join('\n'); |
| } |
| this.value = clipboardContents; |
| |
| event.preventDefault(); |
| } |
| }; |
| style = this.elTextarea.style; |
| style.width = '10000px'; |
| style.height = '10000px'; |
| style.overflow = 'hidden'; |
| this.elDiv.appendChild(this.elTextarea); |
| |
| if (typeof style.opacity !== 'undefined') { |
| style.opacity = 0; |
| } |
| } |
| this.onKeyDownRef = this.onKeyDown.bind(this); |
| document.documentElement.addEventListener('keydown', this.onKeyDownRef, false); |
| }; |
| |
| /** |
| * Call method on every key down event |
| * |
| * @param {Event} event |
| */ |
| CopyPasteClass.prototype.onKeyDown = function(event) { |
| var _this = this, |
| isCtrlDown = false; |
| |
| function isActiveElementEditable() { |
| var element = document.activeElement; |
| |
| if (element.shadowRoot && element.shadowRoot.activeElement) { |
| element = element.shadowRoot.activeElement; |
| } |
| |
| return ['INPUT', 'SELECT', 'TEXTAREA'].indexOf(element.nodeName) > -1 || element.contentEditable === 'true'; |
| } |
| |
| // mac |
| if (event.metaKey) { |
| isCtrlDown = true; |
| } |
| // pc |
| else if (event.ctrlKey && navigator.userAgent.indexOf('Mac') === -1) { |
| isCtrlDown = true; |
| } |
| if (isCtrlDown) { |
| // this is needed by fragmentSelection in Handsontable. Ignore copypaste.js behavior if fragment of cell text is selected |
| if (document.activeElement !== this.elTextarea && (this.getSelectionText() !== '' || isActiveElementEditable())) { |
| return; |
| } |
| this.selectNodeText(this.elTextarea); |
| setTimeout(function() { |
| if (document.activeElement !== _this.elTextarea) { |
| _this.selectNodeText(_this.elTextarea); |
| } |
| }, 0); |
| } |
| |
| if (event.isImmediatePropagationEnabled !== false && isCtrlDown && |
| (event.keyCode === 67 || |
| event.keyCode === 86 || |
| event.keyCode === 88)) { |
| // works in all browsers, incl. Opera < 12.12 |
| if (event.keyCode === 88) { |
| setTimeout(function () { |
| _this.triggerCut(event); |
| }, 0); |
| |
| } else if (event.keyCode === 86) { |
| setTimeout(function () { |
| _this.triggerPaste(event); |
| }, 0); |
| } |
| } |
| }; |
| |
| //http://jsperf.com/textara-selection |
| //http://stackoverflow.com/questions/1502385/how-can-i-make-this-code-work-in-ie |
| /** |
| * Select all text contains in passed node element |
| * |
| * @param {Element} element |
| */ |
| CopyPasteClass.prototype.selectNodeText = function(element) { |
| if (element) { |
| element.select(); |
| } |
| }; |
| |
| //http://stackoverflow.com/questions/5379120/get-the-highlighted-selected-text |
| /** |
| * Get selection text |
| * |
| * @returns {String} |
| */ |
| CopyPasteClass.prototype.getSelectionText = function() { |
| var text = ''; |
| |
| if (window.getSelection) { |
| text = window.getSelection().toString(); |
| |
| } else if (document.selection && document.selection.type !== 'Control') { |
| text = document.selection.createRange().text; |
| } |
| |
| return text; |
| }; |
| |
| /** |
| * Make string copyable |
| * |
| * @param {String} string |
| */ |
| CopyPasteClass.prototype.copyable = function(string) { |
| if (typeof string !== 'string' && string.toString === void 0) { |
| throw new Error('copyable requires string parameter'); |
| } |
| this.elTextarea.value = string; |
| this.selectNodeText(this.elTextarea); |
| }; |
| |
| /*CopyPasteClass.prototype.onCopy = function (fn) { |
| this.copyCallbacks.push(fn); |
| };*/ |
| |
| /** |
| * Add function callback to onCut event |
| * |
| * @param {Function} callback |
| */ |
| CopyPasteClass.prototype.onCut = function(callback) { |
| this.cutCallbacks.push(callback); |
| }; |
| |
| /** |
| * Add function callback to onPaste event |
| * |
| * @param {Function} callback |
| */ |
| CopyPasteClass.prototype.onPaste = function(callback) { |
| this.pasteCallbacks.push(callback); |
| }; |
| |
| /** |
| * Remove callback from all events |
| * |
| * @param {Function} callback |
| * @returns {Boolean} |
| */ |
| CopyPasteClass.prototype.removeCallback = function(callback) { |
| var i, len; |
| |
| for (i = 0, len = this.copyCallbacks.length; i < len; i++) { |
| if (this.copyCallbacks[i] === callback) { |
| this.copyCallbacks.splice(i, 1); |
| |
| return true; |
| } |
| } |
| for (i = 0, len = this.cutCallbacks.length; i < len; i++) { |
| if (this.cutCallbacks[i] === callback) { |
| this.cutCallbacks.splice(i, 1); |
| |
| return true; |
| } |
| } |
| for (i = 0, len = this.pasteCallbacks.length; i < len; i++) { |
| if (this.pasteCallbacks[i] === callback) { |
| this.pasteCallbacks.splice(i, 1); |
| |
| return true; |
| } |
| } |
| |
| return false; |
| }; |
| |
| /** |
| * Trigger cut event |
| * |
| * @param {DOMEvent} event |
| */ |
| CopyPasteClass.prototype.triggerCut = function(event) { |
| var _this = this; |
| |
| if (_this.cutCallbacks) { |
| setTimeout(function () { |
| for (var i = 0, len = _this.cutCallbacks.length; i < len; i++) { |
| _this.cutCallbacks[i](event); |
| } |
| }, 50); |
| } |
| }; |
| |
| /** |
| * Trigger paste event |
| * |
| * @param {DOMEvent} event |
| * @param {String} string |
| */ |
| CopyPasteClass.prototype.triggerPaste = function(event, string) { |
| var _this = this; |
| |
| if (_this.pasteCallbacks) { |
| setTimeout(function () { |
| var val = string || _this.elTextarea.value; |
| |
| for (var i = 0, len = _this.pasteCallbacks.length; i < len; i++) { |
| _this.pasteCallbacks[i](val, event); |
| } |
| }, 50); |
| } |
| }; |
| |
| /** |
| * Destroy instance |
| */ |
| CopyPasteClass.prototype.destroy = function() { |
| if (!this.hasBeenDestroyed() && --this.refCounter === 0) { |
| if (this.elDiv && this.elDiv.parentNode) { |
| this.elDiv.parentNode.removeChild(this.elDiv); |
| this.elDiv = null; |
| this.elTextarea = null; |
| } |
| document.documentElement.removeEventListener('keydown', this.onKeyDownRef); |
| this.onKeyDownRef = null; |
| } |
| }; |
| |
| /** |
| * Check if instance has been destroyed |
| * |
| * @returns {Boolean} |
| */ |
| CopyPasteClass.prototype.hasBeenDestroyed = function() { |
| return !this.refCounter; |
| }; |
| |
| |
| |
| },{}],"es6collections":[function(_dereq_,module,exports){ |
| /*! |
| * Copyright (C) 2011 by Andrea Giammarchi, @WebReflection |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a copy |
| * of this software and associated documentation files (the "Software"), to deal |
| * in the Software without restriction, including without limitation the rights |
| * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| * copies of the Software, and to permit persons to whom the Software is |
| * furnished to do so, subject to the following conditions: |
| * |
| * The above copyright notice and this permission notice shall be included in |
| * all copies or substantial portions of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
| * THE SOFTWARE. |
| */ |
| (function(exports) { |
| 'use strict'; |
| //shared pointer |
| var i; |
| //shortcuts |
| var defineProperty = Object.defineProperty, |
| is = function(a, b) { |
| return isNaN(a) ? isNaN(b) : a === b; |
| }; |
| |
| |
| //Polyfill global objects |
| if (typeof WeakMap == 'undefined') { |
| exports.WeakMap = createCollection({ |
| // WeakMap#delete(key:void*):boolean |
| 'delete': sharedDelete, |
| // WeakMap#clear(): |
| clear: sharedClear, |
| // WeakMap#get(key:void*):void* |
| get: sharedGet, |
| // WeakMap#has(key:void*):boolean |
| has: mapHas, |
| // WeakMap#set(key:void*, value:void*):void |
| set: sharedSet |
| }, true); |
| } |
| |
| if (typeof Map == 'undefined') { |
| exports.Map = createCollection({ |
| // WeakMap#delete(key:void*):boolean |
| 'delete': sharedDelete, |
| //:was Map#get(key:void*[, d3fault:void*]):void* |
| // Map#has(key:void*):boolean |
| has: mapHas, |
| // Map#get(key:void*):boolean |
| get: sharedGet, |
| // Map#set(key:void*, value:void*):void |
| set: sharedSet, |
| // Map#keys(void):Iterator |
| keys: sharedKeys, |
| // Map#values(void):Iterator |
| values: sharedValues, |
| // Map#entries(void):Iterator |
| entries: mapEntries, |
| // Map#forEach(callback:Function, context:void*):void ==> callback.call(context, key, value, mapObject) === not in specs` |
| forEach: sharedForEach, |
| // Map#clear(): |
| clear: sharedClear |
| }); |
| } |
| |
| if (typeof Set == 'undefined') { |
| exports.Set = createCollection({ |
| // Set#has(value:void*):boolean |
| has: setHas, |
| // Set#add(value:void*):boolean |
| add: sharedAdd, |
| // Set#delete(key:void*):boolean |
| 'delete': sharedDelete, |
| // Set#clear(): |
| clear: sharedClear, |
| // Set#keys(void):Iterator |
| keys: sharedValues, // specs actually say "the same function object as the initial value of the values property" |
| // Set#values(void):Iterator |
| values: sharedValues, |
| // Set#entries(void):Iterator |
| entries: setEntries, |
| // Set#forEach(callback:Function, context:void*):void ==> callback.call(context, value, index) === not in specs |
| forEach: sharedForEach |
| }); |
| } |
| |
| if (typeof WeakSet == 'undefined') { |
| exports.WeakSet = createCollection({ |
| // WeakSet#delete(key:void*):boolean |
| 'delete': sharedDelete, |
| // WeakSet#add(value:void*):boolean |
| add: sharedAdd, |
| // WeakSet#clear(): |
| clear: sharedClear, |
| // WeakSet#has(value:void*):boolean |
| has: setHas |
| }, true); |
| } |
| |
| |
| /** |
| * ES6 collection constructor |
| * @return {Function} a collection class |
| */ |
| function createCollection(proto, objectOnly) { |
| function Collection(a) { |
| if (!this || this.constructor !== Collection) return new Collection(a); |
| this._keys = []; |
| this._values = []; |
| this._itp = []; // iteration pointers |
| this.objectOnly = objectOnly; |
| |
| //parse initial iterable argument passed |
| if (a) init.call(this, a); |
| } |
| |
| //define size for non object-only collections |
| if (!objectOnly) { |
| defineProperty(proto, 'size', { |
| get: sharedSize |
| }); |
| } |
| |
| //set prototype |
| proto.constructor = Collection; |
| Collection.prototype = proto; |
| |
| return Collection; |
| } |
| |
| |
| /** parse initial iterable argument passed */ |
| function init(a) { |
| var i; |
| //init Set argument, like `[1,2,3,{}]` |
| if (this.add) a.forEach(this.add, this); |
| //init Map argument like `[[1,2], [{}, 4]]` |
| else a.forEach(function(a) { |
| this.set(a[0], a[1]) |
| }, this); |
| } |
| |
| |
| /** delete */ |
| function sharedDelete(key) { |
| if (this.has(key)) { |
| this._keys.splice(i, 1); |
| this._values.splice(i, 1); |
| // update iteration pointers |
| this._itp.forEach(function(p) { |
| if (i < p[0]) p[0]--; |
| }); |
| } |
| // Aurora here does it while Canary doesn't |
| return -1 < i; |
| }; |
| |
| function sharedGet(key) { |
| return this.has(key) ? this._values[i] : undefined; |
| } |
| |
| function has(list, key) { |
| if (this.objectOnly && key !== Object(key)) throw new TypeError("Invalid value used as weak collection key"); |
| //NaN or 0 passed |
| if (key != key || key === 0) for (i = list.length; i-- && !is(list[i], key);) {} else i = list.indexOf(key); |
| return -1 < i; |
| } |
| |
| function setHas(value) { |
| return has.call(this, this._values, value); |
| } |
| |
| function mapHas(value) { |
| return has.call(this, this._keys, value); |
| } |
| |
| /** @chainable */ |
| function sharedSet(key, value) { |
| this.has(key) ? this._values[i] = value : this._values[this._keys.push(key) - 1] = value; |
| return this; |
| } |
| |
| /** @chainable */ |
| function sharedAdd(value) { |
| if (!this.has(value)) this._values.push(value); |
| return this; |
| } |
| |
| function sharedClear() { |
| this._values.length = 0; |
| } |
| |
| /** keys, values, and iterate related methods */ |
| function sharedKeys() { |
| return sharedIterator(this._itp, this._keys); |
| } |
| |
| function sharedValues() { |
| return sharedIterator(this._itp, this._values); |
| } |
| |
| function mapEntries() { |
| return sharedIterator(this._itp, this._keys, this._values); |
| } |
| |
| function setEntries() { |
| return sharedIterator(this._itp, this._values, this._values); |
| } |
| |
| function sharedIterator(itp, array, array2) { |
| var p = [0], |
| done = false; |
| itp.push(p); |
| return { |
| next: function() { |
| var v, k = p[0]; |
| if (!done && k < array.length) { |
| v = array2 ? [array[k], array2[k]] : array[k]; |
| p[0]++; |
| } else { |
| done = true; |
| itp.splice(itp.indexOf(p), 1); |
| } |
| return { |
| done: done, |
| value: v |
| }; |
| } |
| }; |
| } |
| |
| function sharedSize() { |
| return this._values.length; |
| } |
| |
| function sharedForEach(callback, context) { |
| var it = this.entries(); |
| for (;;) { |
| var r = it.next(); |
| if (r.done) break; |
| callback.call(context, r.value[1], r.value[0], this); |
| } |
| } |
| |
| })(typeof exports != 'undefined' && typeof global != 'undefined' ? global : window); |
| |
| },{}],"jsonpatch":[function(_dereq_,module,exports){ |
| /*! |
| * https://github.com/Starcounter-Jack/JSON-Patch |
| * json-patch-duplex.js version: 0.5.7 |
| * (c) 2013 Joachim Wester |
| * MIT license |
| */ |
| var __extends = (this && this.__extends) || function (d, b) { |
| for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; |
| function __() { this.constructor = d; } |
| d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); |
| }; |
| var OriginalError = Error; |
| var jsonpatch; |
| (function (jsonpatch) { |
| var _objectKeys = function (obj) { |
| if (_isArray(obj)) { |
| var keys = new Array(obj.length); |
| for (var k = 0; k < keys.length; k++) { |
| keys[k] = "" + k; |
| } |
| return keys; |
| } |
| if (Object.keys) { |
| return Object.keys(obj); |
| } |
| var keys = []; |
| for (var i in obj) { |
| if (obj.hasOwnProperty(i)) { |
| keys.push(i); |
| } |
| } |
| return keys; |
| }; |
| function _equals(a, b) { |
| switch (typeof a) { |
| case 'undefined': //backward compatibility, but really I think we should return false |
| case 'boolean': |
| case 'string': |
| case 'number': |
| return a === b; |
| case 'object': |
| if (a === null) |
| return b === null; |
| if (_isArray(a)) { |
| if (!_isArray(b) || a.length !== b.length) |
| return false; |
| for (var i = 0, l = a.length; i < l; i++) |
| if (!_equals(a[i], b[i])) |
| return false; |
| return true; |
| } |
| var bKeys = _objectKeys(b); |
| var bLength = bKeys.length; |
| if (_objectKeys(a).length !== bLength) |
| return false; |
| for (var i = 0; i < bLength; i++) |
| if (!_equals(a[i], b[i])) |
| return false; |
| return true; |
| default: |
| return false; |
| } |
| } |
| /* We use a Javascript hash to store each |
| function. Each hash entry (property) uses |
| the operation identifiers specified in rfc6902. |
| In this way, we can map each patch operation |
| to its dedicated function in efficient way. |
| */ |
| /* The operations applicable to an object */ |
| var objOps = { |
| add: function (obj, key) { |
| obj[key] = this.value; |
| return true; |
| }, |
| remove: function (obj, key) { |
| delete obj[key]; |
| return true; |
| }, |
| replace: function (obj, key) { |
| obj[key] = this.value; |
| return true; |
| }, |
| move: function (obj, key, tree) { |
| var temp = { op: "_get", path: this.from }; |
| apply(tree, [temp]); |
| apply(tree, [ |
| { op: "remove", path: this.from } |
| ]); |
| apply(tree, [ |
| { op: "add", path: this.path, value: temp.value } |
| ]); |
| return true; |
| }, |
| copy: function (obj, key, tree) { |
| var temp = { op: "_get", path: this.from }; |
| apply(tree, [temp]); |
| apply(tree, [ |
| { op: "add", path: this.path, value: temp.value } |
| ]); |
| return true; |
| }, |
| test: function (obj, key) { |
| return _equals(obj[key], this.value); |
| }, |
| _get: function (obj, key) { |
| this.value = obj[key]; |
| } |
| }; |
| /* The operations applicable to an array. Many are the same as for the object */ |
| var arrOps = { |
| add: function (arr, i) { |
| arr.splice(i, 0, this.value); |
| return true; |
| }, |
| remove: function (arr, i) { |
| arr.splice(i, 1); |
| return true; |
| }, |
| replace: function (arr, i) { |
| arr[i] = this.value; |
| return true; |
| }, |
| move: objOps.move, |
| copy: objOps.copy, |
| test: objOps.test, |
| _get: objOps._get |
| }; |
| /* The operations applicable to object root. Many are the same as for the object */ |
| var rootOps = { |
| add: function (obj) { |
| rootOps.remove.call(this, obj); |
| for (var key in this.value) { |
| if (this.value.hasOwnProperty(key)) { |
| obj[key] = this.value[key]; |
| } |
| } |
| return true; |
| }, |
| remove: function (obj) { |
| for (var key in obj) { |
| if (obj.hasOwnProperty(key)) { |
| objOps.remove.call(this, obj, key); |
| } |
| } |
| return true; |
| }, |
| replace: function (obj) { |
| apply(obj, [ |
| { op: "remove", path: this.path } |
| ]); |
| apply(obj, [ |
| { op: "add", path: this.path, value: this.value } |
| ]); |
| return true; |
| }, |
| move: objOps.move, |
| copy: objOps.copy, |
| test: function (obj) { |
| return (JSON.stringify(obj) === JSON.stringify(this.value)); |
| }, |
| _get: function (obj) { |
| this.value = obj; |
| } |
| }; |
| var observeOps = { |
| add: function (patches, path) { |
| var patch = { |
| op: "add", |
| path: path + escapePathComponent(this.name), |
| value: this.object[this.name] }; |
| patches.push(patch); |
| }, |
| 'delete': function (patches, path) { |
| var patch = { |
| op: "remove", |
| path: path + escapePathComponent(this.name) |
| }; |
| patches.push(patch); |
| }, |
| update: function (patches, path) { |
| var patch = { |
| op: "replace", |
| path: path + escapePathComponent(this.name), |
| value: this.object[this.name] |
| }; |
| patches.push(patch); |
| } |
| }; |
| function escapePathComponent(str) { |
| if (str.indexOf('/') === -1 && str.indexOf('~') === -1) |
| return str; |
| return str.replace(/~/g, '~0').replace(/\//g, '~1'); |
| } |
| function _getPathRecursive(root, obj) { |
| var found; |
| for (var key in root) { |
| if (root.hasOwnProperty(key)) { |
| if (root[key] === obj) { |
| return escapePathComponent(key) + '/'; |
| } |
| else if (typeof root[key] === 'object') { |
| found = _getPathRecursive(root[key], obj); |
| if (found != '') { |
| return escapePathComponent(key) + '/' + found; |
| } |
| } |
| } |
| } |
| return ''; |
| } |
| function getPath(root, obj) { |
| if (root === obj) { |
| return '/'; |
| } |
| var path = _getPathRecursive(root, obj); |
| if (path === '') { |
| throw new OriginalError("Object not found in root"); |
| } |
| return '/' + path; |
| } |
| var beforeDict = []; |
| var Mirror = (function () { |
| function Mirror(obj) { |
| this.observers = []; |
| this.obj = obj; |
| } |
| return Mirror; |
| })(); |
| var ObserverInfo = (function () { |
| function ObserverInfo(callback, observer) { |
| this.callback = callback; |
| this.observer = observer; |
| } |
| return ObserverInfo; |
| })(); |
| function getMirror(obj) { |
| for (var i = 0, ilen = beforeDict.length; i < ilen; i++) { |
| if (beforeDict[i].obj === obj) { |
| return beforeDict[i]; |
| } |
| } |
| } |
| function getObserverFromMirror(mirror, callback) { |
| for (var j = 0, jlen = mirror.observers.length; j < jlen; j++) { |
| if (mirror.observers[j].callback === callback) { |
| return mirror.observers[j].observer; |
| } |
| } |
| } |
| function removeObserverFromMirror(mirror, observer) { |
| for (var j = 0, jlen = mirror.observers.length; j < jlen; j++) { |
| if (mirror.observers[j].observer === observer) { |
| mirror.observers.splice(j, 1); |
| return; |
| } |
| } |
| } |
| function unobserve(root, observer) { |
| observer.unobserve(); |
| } |
| jsonpatch.unobserve = unobserve; |
| function deepClone(obj) { |
| if (typeof obj === "object") { |
| return JSON.parse(JSON.stringify(obj)); //Faster than ES5 clone - http://jsperf.com/deep-cloning-of-objects/5 |
| } |
| else { |
| return obj; //no need to clone primitives |
| } |
| } |
| function observe(obj, callback) { |
| var patches = []; |
| var root = obj; |
| var observer; |
| var mirror = getMirror(obj); |
| if (!mirror) { |
| mirror = new Mirror(obj); |
| beforeDict.push(mirror); |
| } |
| else { |
| observer = getObserverFromMirror(mirror, callback); |
| } |
| if (observer) { |
| return observer; |
| } |
| observer = {}; |
| mirror.value = deepClone(obj); |
| if (callback) { |
| observer.callback = callback; |
| observer.next = null; |
| var intervals = this.intervals || [100, 1000, 10000, 60000]; |
| if (intervals.push === void 0) { |
| throw new OriginalError("jsonpatch.intervals must be an array"); |
| } |
| var currentInterval = 0; |
| var dirtyCheck = function () { |
| generate(observer); |
| }; |
| var fastCheck = function () { |
| clearTimeout(observer.next); |
| observer.next = setTimeout(function () { |
| dirtyCheck(); |
| currentInterval = 0; |
| observer.next = setTimeout(slowCheck, intervals[currentInterval++]); |
| }, 0); |
| }; |
| var slowCheck = function () { |
| dirtyCheck(); |
| if (currentInterval == intervals.length) |
| currentInterval = intervals.length - 1; |
| observer.next = setTimeout(slowCheck, intervals[currentInterval++]); |
| }; |
| if (typeof window !== 'undefined') { |
| if (window.addEventListener) { |
| window.addEventListener('mousedown', fastCheck); |
| window.addEventListener('mouseup', fastCheck); |
| window.addEventListener('keydown', fastCheck); |
| } |
| else { |
| document.documentElement.attachEvent('onmousedown', fastCheck); |
| document.documentElement.attachEvent('onmouseup', fastCheck); |
| document.documentElement.attachEvent('onkeydown', fastCheck); |
| } |
| } |
| observer.next = setTimeout(slowCheck, intervals[currentInterval++]); |
| } |
| observer.patches = patches; |
| observer.object = obj; |
| observer.unobserve = function () { |
| generate(observer); |
| clearTimeout(observer.next); |
| removeObserverFromMirror(mirror, observer); |
| if (typeof window !== 'undefined') { |
| if (window.removeEventListener) { |
| window.removeEventListener('mousedown', fastCheck); |
| window.removeEventListener('mouseup', fastCheck); |
| window.removeEventListener('keydown', fastCheck); |
| } |
| else { |
| document.documentElement.detachEvent('onmousedown', fastCheck); |
| document.documentElement.detachEvent('onmouseup', fastCheck); |
| document.documentElement.detachEvent('onkeydown', fastCheck); |
| } |
| } |
| }; |
| mirror.observers.push(new ObserverInfo(callback, observer)); |
| return observer; |
| } |
| jsonpatch.observe = observe; |
| function generate(observer) { |
| var mirror; |
| for (var i = 0, ilen = beforeDict.length; i < ilen; i++) { |
| if (beforeDict[i].obj === observer.object) { |
| mirror = beforeDict[i]; |
| break; |
| } |
| } |
| _generate(mirror.value, observer.object, observer.patches, ""); |
| if (observer.patches.length) { |
| apply(mirror.value, observer.patches); |
| } |
| var temp = observer.patches; |
| if (temp.length > 0) { |
| observer.patches = []; |
| if (observer.callback) { |
| observer.callback(temp); |
| } |
| } |
| return temp; |
| } |
| jsonpatch.generate = generate; |
| // Dirty check if obj is different from mirror, generate patches and update mirror |
| function _generate(mirror, obj, patches, path) { |
| var newKeys = _objectKeys(obj); |
| var oldKeys = _objectKeys(mirror); |
| var changed = false; |
| var deleted = false; |
| //if ever "move" operation is implemented here, make sure this test runs OK: "should not generate the same patch twice (move)" |
| for (var t = oldKeys.length - 1; t >= 0; t--) { |
| var key = oldKeys[t]; |
| var oldVal = mirror[key]; |
| if (obj.hasOwnProperty(key)) { |
| var newVal = obj[key]; |
| if (typeof oldVal == "object" && oldVal != null && typeof newVal == "object" && newVal != null) { |
| _generate(oldVal, newVal, patches, path + "/" + escapePathComponent(key)); |
| } |
| else { |
| if (oldVal != newVal) { |
| changed = true; |
| patches.push({ op: "replace", path: path + "/" + escapePathComponent(key), value: deepClone(newVal) }); |
| } |
| } |
| } |
| else { |
| patches.push({ op: "remove", path: path + "/" + escapePathComponent(key) }); |
| deleted = true; // property has been deleted |
| } |
| } |
| if (!deleted && newKeys.length == oldKeys.length) { |
| return; |
| } |
| for (var t = 0; t < newKeys.length; t++) { |
| var key = newKeys[t]; |
| if (!mirror.hasOwnProperty(key)) { |
| patches.push({ op: "add", path: path + "/" + escapePathComponent(key), value: deepClone(obj[key]) }); |
| } |
| } |
| } |
| var _isArray; |
| if (Array.isArray) { |
| _isArray = Array.isArray; |
| } |
| else { |
| _isArray = function (obj) { |
| return obj.push && typeof obj.length === 'number'; |
| }; |
| } |
| //3x faster than cached /^\d+$/.test(str) |
| function isInteger(str) { |
| var i = 0; |
| var len = str.length; |
| var charCode; |
| while (i < len) { |
| charCode = str.charCodeAt(i); |
| if (charCode >= 48 && charCode <= 57) { |
| i++; |
| continue; |
| } |
| return false; |
| } |
| return true; |
| } |
| /// Apply a json-patch operation on an object tree |
| function apply(tree, patches, validate) { |
| var result = false, p = 0, plen = patches.length, patch, key; |
| while (p < plen) { |
| patch = patches[p]; |
| p++; |
| // Find the object |
| var path = patch.path || ""; |
| var keys = path.split('/'); |
| var obj = tree; |
| var t = 1; //skip empty element - http://jsperf.com/to-shift-or-not-to-shift |
| var len = keys.length; |
| var existingPathFragment = undefined; |
| while (true) { |
| key = keys[t]; |
| if (validate) { |
| if (existingPathFragment === undefined) { |
| if (obj[key] === undefined) { |
| existingPathFragment = keys.slice(0, t).join('/'); |
| } |
| else if (t == len - 1) { |
| existingPathFragment = patch.path; |
| } |
| if (existingPathFragment !== undefined) { |
| this.validator(patch, p - 1, tree, existingPathFragment); |
| } |
| } |
| } |
| t++; |
| if (key === undefined) { |
| if (t >= len) { |
| result = rootOps[patch.op].call(patch, obj, key, tree); // Apply patch |
| break; |
| } |
| } |
| if (_isArray(obj)) { |
| if (key === '-') { |
| key = obj.length; |
| } |
| else { |
| if (validate && !isInteger(key)) { |
| throw new JsonPatchError("Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index", "OPERATION_PATH_ILLEGAL_ARRAY_INDEX", p - 1, patch.path, patch); |
| } |
| key = parseInt(key, 10); |
| } |
| if (t >= len) { |
| if (validate && patch.op === "add" && key > obj.length) { |
| throw new JsonPatchError("The specified index MUST NOT be greater than the number of elements in the array", "OPERATION_VALUE_OUT_OF_BOUNDS", p - 1, patch.path, patch); |
| } |
| result = arrOps[patch.op].call(patch, obj, key, tree); // Apply patch |
| break; |
| } |
| } |
| else { |
| if (key && key.indexOf('~') != -1) |
| key = key.replace(/~1/g, '/').replace(/~0/g, '~'); // escape chars |
| if (t >= len) { |
| result = objOps[patch.op].call(patch, obj, key, tree); // Apply patch |
| break; |
| } |
| } |
| obj = obj[key]; |
| } |
| } |
| return result; |
| } |
| jsonpatch.apply = apply; |
| function compare(tree1, tree2) { |
| var patches = []; |
| _generate(tree1, tree2, patches, ''); |
| return patches; |
| } |
| jsonpatch.compare = compare; |
| var JsonPatchError = (function (_super) { |
| __extends(JsonPatchError, _super); |
| function JsonPatchError(message, name, index, operation, tree) { |
| _super.call(this, message); |
| this.message = message; |
| this.name = name; |
| this.index = index; |
| this.operation = operation; |
| this.tree = tree; |
| } |
| return JsonPatchError; |
| })(OriginalError); |
| jsonpatch.JsonPatchError = JsonPatchError; |
| jsonpatch.Error = JsonPatchError; |
| /** |
| * Recursively checks whether an object has any undefined values inside. |
| */ |
| function hasUndefined(obj) { |
| if (obj === undefined) { |
| return true; |
| } |
| if (typeof obj == "array" || typeof obj == "object") { |
| for (var i in obj) { |
| if (hasUndefined(obj[i])) { |
| return true; |
| } |
| } |
| } |
| return false; |
| } |
| /** |
| * Validates a single operation. Called from `jsonpatch.validate`. Throws `JsonPatchError` in case of an error. |
| * @param {object} operation - operation object (patch) |
| * @param {number} index - index of operation in the sequence |
| * @param {object} [tree] - object where the operation is supposed to be applied |
| * @param {string} [existingPathFragment] - comes along with `tree` |
| */ |
| function validator(operation, index, tree, existingPathFragment) { |
| if (typeof operation !== 'object' || operation === null || _isArray(operation)) { |
| throw new JsonPatchError('Operation is not an object', 'OPERATION_NOT_AN_OBJECT', index, operation, tree); |
| } |
| else if (!objOps[operation.op]) { |
| throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, tree); |
| } |
| else if (typeof operation.path !== 'string') { |
| throw new JsonPatchError('Operation `path` property is not a string', 'OPERATION_PATH_INVALID', index, operation, tree); |
| } |
| else if ((operation.op === 'move' || operation.op === 'copy') && typeof operation.from !== 'string') { |
| throw new JsonPatchError('Operation `from` property is not present (applicable in `move` and `copy` operations)', 'OPERATION_FROM_REQUIRED', index, operation, tree); |
| } |
| else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && operation.value === undefined) { |
| throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_REQUIRED', index, operation, tree); |
| } |
| else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && hasUndefined(operation.value)) { |
| throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED', index, operation, tree); |
| } |
| else if (tree) { |
| if (operation.op == "add") { |
| var pathLen = operation.path.split("/").length; |
| var existingPathLen = existingPathFragment.split("/").length; |
| if (pathLen !== existingPathLen + 1 && pathLen !== existingPathLen) { |
| throw new JsonPatchError('Cannot perform an `add` operation at the desired path', 'OPERATION_PATH_CANNOT_ADD', index, operation, tree); |
| } |
| } |
| else if (operation.op === 'replace' || operation.op === 'remove' || operation.op === '_get') { |
| if (operation.path !== existingPathFragment) { |
| throw new JsonPatchError('Cannot perform the operation at a path that does not exist', 'OPERATION_PATH_UNRESOLVABLE', index, operation, tree); |
| } |
| } |
| else if (operation.op === 'move' || operation.op === 'copy') { |
| var existingValue = { op: "_get", path: operation.from, value: undefined }; |
| var error = jsonpatch.validate([existingValue], tree); |
| if (error && error.name === 'OPERATION_PATH_UNRESOLVABLE') { |
| throw new JsonPatchError('Cannot perform the operation from a path that does not exist', 'OPERATION_FROM_UNRESOLVABLE', index, operation, tree); |
| } |
| } |
| } |
| } |
| jsonpatch.validator = validator; |
| /** |
| * Validates a sequence of operations. If `tree` parameter is provided, the sequence is additionally validated against the object tree. |
| * If error is encountered, returns a JsonPatchError object |
| * @param sequence |
| * @param tree |
| * @returns {JsonPatchError|undefined} |
| */ |
| function validate(sequence, tree) { |
| try { |
| if (!_isArray(sequence)) { |
| throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY'); |
| } |
| if (tree) { |
| tree = JSON.parse(JSON.stringify(tree)); //clone tree so that we can safely try applying operations |
| apply.call(this, tree, sequence, true); |
| } |
| else { |
| for (var i = 0; i < sequence.length; i++) { |
| this.validator(sequence[i], i); |
| } |
| } |
| } |
| catch (e) { |
| if (e instanceof JsonPatchError) { |
| return e; |
| } |
| else { |
| throw e; |
| } |
| } |
| } |
| jsonpatch.validate = validate; |
| })(jsonpatch || (jsonpatch = {})); |
| if (typeof exports !== "undefined") { |
| exports.apply = jsonpatch.apply; |
| exports.observe = jsonpatch.observe; |
| exports.unobserve = jsonpatch.unobserve; |
| exports.generate = jsonpatch.generate; |
| exports.compare = jsonpatch.compare; |
| exports.validate = jsonpatch.validate; |
| exports.validator = jsonpatch.validator; |
| exports.JsonPatchError = jsonpatch.JsonPatchError; |
| exports.Error = jsonpatch.Error; |
| } |
| |
| },{}],"moment":[function(_dereq_,module,exports){ |
| //! moment.js |
| //! version : 2.14.1 |
| //! authors : Tim Wood, Iskren Chernev, Moment.js contributors |
| //! license : MIT |
| //! momentjs.com |
| |
| ;(function (global, factory) { |
| typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : |
| typeof define === 'function' && define.amd ? define(factory) : |
| global.moment = factory() |
| }(this, function () { 'use strict'; |
| |
| var hookCallback; |
| |
| function utils_hooks__hooks () { |
| return hookCallback.apply(null, arguments); |
| } |
| |
| // This is done to register the method called with moment() |
| // without creating circular dependencies. |
| function setHookCallback (callback) { |
| hookCallback = callback; |
| } |
| |
| function isArray(input) { |
| return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]'; |
| } |
| |
| function isObject(input) { |
| return Object.prototype.toString.call(input) === '[object Object]'; |
| } |
| |
| function isObjectEmpty(obj) { |
| var k; |
| for (k in obj) { |
| // even if its not own property I'd still call it non-empty |
| return false; |
| } |
| return true; |
| } |
| |
| function isDate(input) { |
| return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; |
| } |
| |
| function map(arr, fn) { |
| var res = [], i; |
| for (i = 0; i < arr.length; ++i) { |
| res.push(fn(arr[i], i)); |
| } |
| return res; |
| } |
| |
| function hasOwnProp(a, b) { |
| return Object.prototype.hasOwnProperty.call(a, b); |
| } |
| |
| function extend(a, b) { |
| for (var i in b) { |
| if (hasOwnProp(b, i)) { |
| a[i] = b[i]; |
| } |
| } |
| |
| if (hasOwnProp(b, 'toString')) { |
| a.toString = b.toString; |
| } |
| |
| if (hasOwnProp(b, 'valueOf')) { |
| a.valueOf = b.valueOf; |
| } |
| |
| return a; |
| } |
| |
| function create_utc__createUTC (input, format, locale, strict) { |
| return createLocalOrUTC(input, format, locale, strict, true).utc(); |
| } |
| |
| function defaultParsingFlags() { |
| // We need to deep clone this object. |
| return { |
| empty : false, |
| unusedTokens : [], |
| unusedInput : [], |
| overflow : -2, |
| charsLeftOver : 0, |
| nullInput : false, |
| invalidMonth : null, |
| invalidFormat : false, |
| userInvalidated : false, |
| iso : false, |
| parsedDateParts : [], |
| meridiem : null |
| }; |
| } |
| |
| function getParsingFlags(m) { |
| if (m._pf == null) { |
| m._pf = defaultParsingFlags(); |
| } |
| return m._pf; |
| } |
| |
| var some; |
| if (Array.prototype.some) { |
| some = Array.prototype.some; |
| } else { |
| some = function (fun) { |
| var t = Object(this); |
| var len = t.length >>> 0; |
| |
| for (var i = 0; i < len; i++) { |
| if (i in t && fun.call(this, t[i], i, t)) { |
| return true; |
| } |
| } |
| |
| return false; |
| }; |
| } |
| |
| function valid__isValid(m) { |
| if (m._isValid == null) { |
| var flags = getParsingFlags(m); |
| var parsedParts = some.call(flags.parsedDateParts, function (i) { |
| return i != null; |
| }); |
| m._isValid = !isNaN(m._d.getTime()) && |
| flags.overflow < 0 && |
| !flags.empty && |
| !flags.invalidMonth && |
| !flags.invalidWeekday && |
| !flags.nullInput && |
| !flags.invalidFormat && |
| !flags.userInvalidated && |
| (!flags.meridiem || (flags.meridiem && parsedParts)); |
| |
| if (m._strict) { |
| m._isValid = m._isValid && |
| flags.charsLeftOver === 0 && |
| flags.unusedTokens.length === 0 && |
| flags.bigHour === undefined; |
| } |
| } |
| return m._isValid; |
| } |
| |
| function valid__createInvalid (flags) { |
| var m = create_utc__createUTC(NaN); |
| if (flags != null) { |
| extend(getParsingFlags(m), flags); |
| } |
| else { |
| getParsingFlags(m).userInvalidated = true; |
| } |
| |
| return m; |
| } |
| |
| function isUndefined(input) { |
| return input === void 0; |
| } |
| |
| // Plugins that add properties should also add the key here (null value), |
| // so we can properly clone ourselves. |
| var momentProperties = utils_hooks__hooks.momentProperties = []; |
| |
| function copyConfig(to, from) { |
| var i, prop, val; |
| |
| if (!isUndefined(from._isAMomentObject)) { |
| to._isAMomentObject = from._isAMomentObject; |
| } |
| if (!isUndefined(from._i)) { |
| to._i = from._i; |
| } |
| if (!isUndefined(from._f)) { |
| to._f = from._f; |
| } |
| if (!isUndefined(from._l)) { |
| to._l = from._l; |
| } |
| if (!isUndefined(from._strict)) { |
| to._strict = from._strict; |
| } |
| if (!isUndefined(from._tzm)) { |
| to._tzm = from._tzm; |
| } |
| if (!isUndefined(from._isUTC)) { |
| to._isUTC = from._isUTC; |
| } |
| if (!isUndefined(from._offset)) { |
| to._offset = from._offset; |
| } |
| if (!isUndefined(from._pf)) { |
| to._pf = getParsingFlags(from); |
| } |
| if (!isUndefined(from._locale)) { |
| to._locale = from._locale; |
| } |
| |
| if (momentProperties.length > 0) { |
| for (i in momentProperties) { |
| prop = momentProperties[i]; |
| val = from[prop]; |
| if (!isUndefined(val)) { |
| to[prop] = val; |
| } |
| } |
| } |
| |
| return to; |
| } |
| |
| var updateInProgress = false; |
| |
| // Moment prototype object |
| function Moment(config) { |
| copyConfig(this, config); |
| this._d = new Date(config._d != null ? config._d.getTime() : NaN); |
| // Prevent infinite loop in case updateOffset creates new moment |
| // objects. |
| if (updateInProgress === false) { |
| updateInProgress = true; |
| utils_hooks__hooks.updateOffset(this); |
| updateInProgress = false; |
| } |
| } |
| |
| function isMoment (obj) { |
| return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); |
| } |
| |
| function absFloor (number) { |
| if (number < 0) { |
| // -0 -> 0 |
| return Math.ceil(number) || 0; |
| } else { |
| return Math.floor(number); |
| } |
| } |
| |
| function toInt(argumentForCoercion) { |
| var coercedNumber = +argumentForCoercion, |
| value = 0; |
| |
| if (coercedNumber !== 0 && isFinite(coercedNumber)) { |
| value = absFloor(coercedNumber); |
| } |
| |
| return value; |
| } |
| |
| // compare two arrays, return the number of differences |
| function compareArrays(array1, array2, dontConvert) { |
| var len = Math.min(array1.length, array2.length), |
| lengthDiff = Math.abs(array1.length - array2.length), |
| diffs = 0, |
| i; |
| for (i = 0; i < len; i++) { |
| if ((dontConvert && array1[i] !== array2[i]) || |
| (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { |
| diffs++; |
| } |
| } |
| return diffs + lengthDiff; |
| } |
| |
| function warn(msg) { |
| if (utils_hooks__hooks.suppressDeprecationWarnings === false && |
| (typeof console !== 'undefined') && console.warn) { |
| console.warn('Deprecation warning: ' + msg); |
| } |
| } |
| |
| function deprecate(msg, fn) { |
| var firstTime = true; |
| |
| return extend(function () { |
| if (utils_hooks__hooks.deprecationHandler != null) { |
| utils_hooks__hooks.deprecationHandler(null, msg); |
| } |
| if (firstTime) { |
| warn(msg + '\nArguments: ' + Array.prototype.slice.call(arguments).join(', ') + '\n' + (new Error()).stack); |
| firstTime = false; |
| } |
| return fn.apply(this, arguments); |
| }, fn); |
| } |
| |
| var deprecations = {}; |
| |
| function deprecateSimple(name, msg) { |
| if (utils_hooks__hooks.deprecationHandler != null) { |
| utils_hooks__hooks.deprecationHandler(name, msg); |
| } |
| if (!deprecations[name]) { |
| warn(msg); |
| deprecations[name] = true; |
| } |
| } |
| |
| utils_hooks__hooks.suppressDeprecationWarnings = false; |
| utils_hooks__hooks.deprecationHandler = null; |
| |
| function isFunction(input) { |
| return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; |
| } |
| |
| function locale_set__set (config) { |
| var prop, i; |
| for (i in config) { |
| prop = config[i]; |
| if (isFunction(prop)) { |
| this[i] = prop; |
| } else { |
| this['_' + i] = prop; |
| } |
| } |
| this._config = config; |
| // Lenient ordinal parsing accepts just a number in addition to |
| // number + (possibly) stuff coming from _ordinalParseLenient. |
| this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); |
| } |
| |
| function mergeConfigs(parentConfig, childConfig) { |
| var res = extend({}, parentConfig), prop; |
| for (prop in childConfig) { |
| if (hasOwnProp(childConfig, prop)) { |
| if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { |
| res[prop] = {}; |
| extend(res[prop], parentConfig[prop]); |
| extend(res[prop], childConfig[prop]); |
| } else if (childConfig[prop] != null) { |
| res[prop] = childConfig[prop]; |
| } else { |
| delete res[prop]; |
| } |
| } |
| } |
| for (prop in parentConfig) { |
| if (hasOwnProp(parentConfig, prop) && |
| !hasOwnProp(childConfig, prop) && |
| isObject(parentConfig[prop])) { |
| // make sure changes to properties don't modify parent config |
| res[prop] = extend({}, res[prop]); |
| } |
| } |
| return res; |
| } |
| |
| function Locale(config) { |
| if (config != null) { |
| this.set(config); |
| } |
| } |
| |
| var keys; |
| |
| if (Object.keys) { |
| keys = Object.keys; |
| } else { |
| keys = function (obj) { |
| var i, res = []; |
| for (i in obj) { |
| if (hasOwnProp(obj, i)) { |
| res.push(i); |
| } |
| } |
| return res; |
| }; |
| } |
| |
| var defaultCalendar = { |
| sameDay : '[Today at] LT', |
| nextDay : '[Tomorrow at] LT', |
| nextWeek : 'dddd [at] LT', |
| lastDay : '[Yesterday at] LT', |
| lastWeek : '[Last] dddd [at] LT', |
| sameElse : 'L' |
| }; |
| |
| function locale_calendar__calendar (key, mom, now) { |
| var output = this._calendar[key] || this._calendar['sameElse']; |
| return isFunction(output) ? output.call(mom, now) : output; |
| } |
| |
| var defaultLongDateFormat = { |
| LTS : 'h:mm:ss A', |
| LT : 'h:mm A', |
| L : 'MM/DD/YYYY', |
| LL : 'MMMM D, YYYY', |
| LLL : 'MMMM D, YYYY h:mm A', |
| LLLL : 'dddd, MMMM D, YYYY h:mm A' |
| }; |
| |
| function longDateFormat (key) { |
| var format = this._longDateFormat[key], |
| formatUpper = this._longDateFormat[key.toUpperCase()]; |
| |
| if (format || !formatUpper) { |
| return format; |
| } |
| |
| this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { |
| return val.slice(1); |
| }); |
| |
| return this._longDateFormat[key]; |
| } |
| |
| var defaultInvalidDate = 'Invalid date'; |
| |
| function invalidDate () { |
| return this._invalidDate; |
| } |
| |
| var defaultOrdinal = '%d'; |
| var defaultOrdinalParse = /\d{1,2}/; |
| |
| function ordinal (number) { |
| return this._ordinal.replace('%d', number); |
| } |
| |
| var defaultRelativeTime = { |
| future : 'in %s', |
| past : '%s ago', |
| s : 'a few seconds', |
| m : 'a minute', |
| mm : '%d minutes', |
| h : 'an hour', |
| hh : '%d hours', |
| d : 'a day', |
| dd : '%d days', |
| M : 'a month', |
| MM : '%d months', |
| y : 'a year', |
| yy : '%d years' |
| }; |
| |
| function relative__relativeTime (number, withoutSuffix, string, isFuture) { |
| var output = this._relativeTime[string]; |
| return (isFunction(output)) ? |
| output(number, withoutSuffix, string, isFuture) : |
| output.replace(/%d/i, number); |
| } |
| |
| function pastFuture (diff, output) { |
| var format = this._relativeTime[diff > 0 ? 'future' : 'past']; |
| return isFunction(format) ? format(output) : format.replace(/%s/i, output); |
| } |
| |
| var aliases = {}; |
| |
| function addUnitAlias (unit, shorthand) { |
| var lowerCase = unit.toLowerCase(); |
| aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; |
| } |
| |
| function normalizeUnits(units) { |
| return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; |
| } |
| |
| function normalizeObjectUnits(inputObject) { |
| var normalizedInput = {}, |
| normalizedProp, |
| prop; |
| |
| for (prop in inputObject) { |
| if (hasOwnProp(inputObject, prop)) { |
| normalizedProp = normalizeUnits(prop); |
| if (normalizedProp) { |
| normalizedInput[normalizedProp] = inputObject[prop]; |
| } |
| } |
| } |
| |
| return normalizedInput; |
| } |
| |
| var priorities = {}; |
| |
| function addUnitPriority(unit, priority) { |
| priorities[unit] = priority; |
| } |
| |
| function getPrioritizedUnits(unitsObj) { |
| var units = []; |
| for (var u in unitsObj) { |
| units.push({unit: u, priority: priorities[u]}); |
| } |
| units.sort(function (a, b) { |
| return a.priority - b.priority; |
| }); |
| return units; |
| } |
| |
| function makeGetSet (unit, keepTime) { |
| return function (value) { |
| if (value != null) { |
| get_set__set(this, unit, value); |
| utils_hooks__hooks.updateOffset(this, keepTime); |
| return this; |
| } else { |
| return get_set__get(this, unit); |
| } |
| }; |
| } |
| |
| function get_set__get (mom, unit) { |
| return mom.isValid() ? |
| mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; |
| } |
| |
| function get_set__set (mom, unit, value) { |
| if (mom.isValid()) { |
| mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); |
| } |
| } |
| |
| // MOMENTS |
| |
| function stringGet (units) { |
| units = normalizeUnits(units); |
| if (isFunction(this[units])) { |
| return this[units](); |
| } |
| return this; |
| } |
| |
| |
| function stringSet (units, value) { |
| if (typeof units === 'object') { |
| units = normalizeObjectUnits(units); |
| var prioritized = getPrioritizedUnits(units); |
| for (var i = 0; i < prioritized.length; i++) { |
| this[prioritized[i].unit](units[prioritized[i].unit]); |
| } |
| } else { |
| units = normalizeUnits(units); |
| if (isFunction(this[units])) { |
| return this[units](value); |
| } |
| } |
| return this; |
| } |
| |
| function zeroFill(number, targetLength, forceSign) { |
| var absNumber = '' + Math.abs(number), |
| zerosToFill = targetLength - absNumber.length, |
| sign = number >= 0; |
| return (sign ? (forceSign ? '+' : '') : '-') + |
| Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; |
| } |
| |
| var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; |
| |
| var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; |
| |
| var formatFunctions = {}; |
| |
| var formatTokenFunctions = {}; |
| |
| // token: 'M' |
| // padded: ['MM', 2] |
| // ordinal: 'Mo' |
| // callback: function () { this.month() + 1 } |
| function addFormatToken (token, padded, ordinal, callback) { |
| var func = callback; |
| if (typeof callback === 'string') { |
| func = function () { |
| return this[callback](); |
| }; |
| } |
| if (token) { |
| formatTokenFunctions[token] = func; |
| } |
| if (padded) { |
| formatTokenFunctions[padded[0]] = function () { |
| return zeroFill(func.apply(this, arguments), padded[1], padded[2]); |
| }; |
| } |
| if (ordinal) { |
| formatTokenFunctions[ordinal] = function () { |
| return this.localeData().ordinal(func.apply(this, arguments), token); |
| }; |
| } |
| } |
| |
| function removeFormattingTokens(input) { |
| if (input.match(/\[[\s\S]/)) { |
| return input.replace(/^\[|\]$/g, ''); |
| } |
| return input.replace(/\\/g, ''); |
| } |
| |
| function makeFormatFunction(format) { |
| var array = format.match(formattingTokens), i, length; |
| |
| for (i = 0, length = array.length; i < length; i++) { |
| if (formatTokenFunctions[array[i]]) { |
| array[i] = formatTokenFunctions[array[i]]; |
| } else { |
| array[i] = removeFormattingTokens(array[i]); |
| } |
| } |
| |
| return function (mom) { |
| var output = '', i; |
| for (i = 0; i < length; i++) { |
| output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; |
| } |
| return output; |
| }; |
| } |
| |
| // format date using native date object |
| function formatMoment(m, format) { |
| if (!m.isValid()) { |
| return m.localeData().invalidDate(); |
| } |
| |
| format = expandFormat(format, m.localeData()); |
| formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); |
| |
| return formatFunctions[format](m); |
| } |
| |
| function expandFormat(format, locale) { |
| var i = 5; |
| |
| function replaceLongDateFormatTokens(input) { |
| return locale.longDateFormat(input) || input; |
| } |
| |
| localFormattingTokens.lastIndex = 0; |
| while (i >= 0 && localFormattingTokens.test(format)) { |
| format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); |
| localFormattingTokens.lastIndex = 0; |
| i -= 1; |
| } |
| |
| return format; |
| } |
| |
| var match1 = /\d/; // 0 - 9 |
| var match2 = /\d\d/; // 00 - 99 |
| var match3 = /\d{3}/; // 000 - 999 |
| var match4 = /\d{4}/; // 0000 - 9999 |
| var match6 = /[+-]?\d{6}/; // -999999 - 999999 |
| var match1to2 = /\d\d?/; // 0 - 99 |
| var match3to4 = /\d\d\d\d?/; // 999 - 9999 |
| var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 |
| var match1to3 = /\d{1,3}/; // 0 - 999 |
| var match1to4 = /\d{1,4}/; // 0 - 9999 |
| var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 |
| |
| var matchUnsigned = /\d+/; // 0 - inf |
| var matchSigned = /[+-]?\d+/; // -inf - inf |
| |
| var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z |
| var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z |
| |
| var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 |
| |
| // any word (or two) characters or numbers including two/three word month in arabic. |
| // includes scottish gaelic two word and hyphenated months |
| var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; |
| |
| |
| var regexes = {}; |
| |
| function addRegexToken (token, regex, strictRegex) { |
| regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { |
| return (isStrict && strictRegex) ? strictRegex : regex; |
| }; |
| } |
| |
| function getParseRegexForToken (token, config) { |
| if (!hasOwnProp(regexes, token)) { |
| return new RegExp(unescapeFormat(token)); |
| } |
| |
| return regexes[token](config._strict, config._locale); |
| } |
| |
| // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript |
| function unescapeFormat(s) { |
| return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { |
| return p1 || p2 || p3 || p4; |
| })); |
| } |
| |
| function regexEscape(s) { |
| return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); |
| } |
| |
| var tokens = {}; |
| |
| function addParseToken (token, callback) { |
| var i, func = callback; |
| if (typeof token === 'string') { |
| token = [token]; |
| } |
| if (typeof callback === 'number') { |
| func = function (input, array) { |
| array[callback] = toInt(input); |
| }; |
| } |
| for (i = 0; i < token.length; i++) { |
| tokens[token[i]] = func; |
| } |
| } |
| |
| function addWeekParseToken (token, callback) { |
| addParseToken(token, function (input, array, config, token) { |
| config._w = config._w || {}; |
| callback(input, config._w, config, token); |
| }); |
| } |
| |
| function addTimeToArrayFromToken(token, input, config) { |
| if (input != null && hasOwnProp(tokens, token)) { |
| tokens[token](input, config._a, config, token); |
| } |
| } |
| |
| var YEAR = 0; |
| var MONTH = 1; |
| var DATE = 2; |
| var HOUR = 3; |
| var MINUTE = 4; |
| var SECOND = 5; |
| var MILLISECOND = 6; |
| var WEEK = 7; |
| var WEEKDAY = 8; |
| |
| var indexOf; |
| |
| if (Array.prototype.indexOf) { |
| indexOf = Array.prototype.indexOf; |
| } else { |
| indexOf = function (o) { |
| // I know |
| var i; |
| for (i = 0; i < this.length; ++i) { |
| if (this[i] === o) { |
| return i; |
| } |
| } |
| return -1; |
| }; |
| } |
| |
| function daysInMonth(year, month) { |
| return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); |
| } |
| |
| // FORMATTING |
| |
| addFormatToken('M', ['MM', 2], 'Mo', function () { |
| return this.month() + 1; |
| }); |
| |
| addFormatToken('MMM', 0, 0, function (format) { |
| return this.localeData().monthsShort(this, format); |
| }); |
| |
| addFormatToken('MMMM', 0, 0, function (format) { |
| return this.localeData().months(this, format); |
| }); |
| |
| // ALIASES |
| |
| addUnitAlias('month', 'M'); |
| |
| // PRIORITY |
| |
| addUnitPriority('month', 8); |
| |
| // PARSING |
| |
| addRegexToken('M', match1to2); |
| addRegexToken('MM', match1to2, match2); |
| addRegexToken('MMM', function (isStrict, locale) { |
| return locale.monthsShortRegex(isStrict); |
| }); |
| addRegexToken('MMMM', function (isStrict, locale) { |
| return locale.monthsRegex(isStrict); |
| }); |
| |
| addParseToken(['M', 'MM'], function (input, array) { |
| array[MONTH] = toInt(input) - 1; |
| }); |
| |
| addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { |
| var month = config._locale.monthsParse(input, token, config._strict); |
| // if we didn't find a month name, mark the date as invalid. |
| if (month != null) { |
| array[MONTH] = month; |
| } else { |
| getParsingFlags(config).invalidMonth = input; |
| } |
| }); |
| |
| // LOCALES |
| |
| var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/; |
| var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); |
| function localeMonths (m, format) { |
| return isArray(this._months) ? this._months[m.month()] : |
| this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()]; |
| } |
| |
| var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); |
| function localeMonthsShort (m, format) { |
| return isArray(this._monthsShort) ? this._monthsShort[m.month()] : |
| this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; |
| } |
| |
| function units_month__handleStrictParse(monthName, format, strict) { |
| var i, ii, mom, llc = monthName.toLocaleLowerCase(); |
| if (!this._monthsParse) { |
| // this is not used |
| this._monthsParse = []; |
| this._longMonthsParse = []; |
| this._shortMonthsParse = []; |
| for (i = 0; i < 12; ++i) { |
| mom = create_utc__createUTC([2000, i]); |
| this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase(); |
| this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); |
| } |
| } |
| |
| if (strict) { |
| if (format === 'MMM') { |
| ii = indexOf.call(this._shortMonthsParse, llc); |
| return ii !== -1 ? ii : null; |
| } else { |
| ii = indexOf.call(this._longMonthsParse, llc); |
| return ii !== -1 ? ii : null; |
| } |
| } else { |
| if (format === 'MMM') { |
| ii = indexOf.call(this._shortMonthsParse, llc); |
| if (ii !== -1) { |
| return ii; |
| } |
| ii = indexOf.call(this._longMonthsParse, llc); |
| return ii !== -1 ? ii : null; |
| } else { |
| ii = indexOf.call(this._longMonthsParse, llc); |
| if (ii !== -1) { |
| return ii; |
| } |
| ii = indexOf.call(this._shortMonthsParse, llc); |
| return ii !== -1 ? ii : null; |
| } |
| } |
| } |
| |
| function localeMonthsParse (monthName, format, strict) { |
| var i, mom, regex; |
| |
| if (this._monthsParseExact) { |
| return units_month__handleStrictParse.call(this, monthName, format, strict); |
| } |
| |
| if (!this._monthsParse) { |
| this._monthsParse = []; |
| this._longMonthsParse = []; |
| this._shortMonthsParse = []; |
| } |
| |
| // TODO: add sorting |
| // Sorting makes sure if one month (or abbr) is a prefix of another |
| // see sorting in computeMonthsParse |
| for (i = 0; i < 12; i++) { |
| // make the regex if we don't have it already |
| mom = create_utc__createUTC([2000, i]); |
| if (strict && !this._longMonthsParse[i]) { |
| this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); |
| this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); |
| } |
| if (!strict && !this._monthsParse[i]) { |
| regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); |
| this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); |
| } |
| // test the regex |
| if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { |
| return i; |
| } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { |
| return i; |
| } else if (!strict && this._monthsParse[i].test(monthName)) { |
| return i; |
| } |
| } |
| } |
| |
| // MOMENTS |
| |
| function setMonth (mom, value) { |
| var dayOfMonth; |
| |
| if (!mom.isValid()) { |
| // No op |
| return mom; |
| } |
| |
| if (typeof value === 'string') { |
| if (/^\d+$/.test(value)) { |
| value = toInt(value); |
| } else { |
| value = mom.localeData().monthsParse(value); |
| // TODO: Another silent failure? |
| if (typeof value !== 'number') { |
| return mom; |
| } |
| } |
| } |
| |
| dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); |
| mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); |
| return mom; |
| } |
| |
| function getSetMonth (value) { |
| if (value != null) { |
| setMonth(this, value); |
| utils_hooks__hooks.updateOffset(this, true); |
| return this; |
| } else { |
| return get_set__get(this, 'Month'); |
| } |
| } |
| |
| function getDaysInMonth () { |
| return daysInMonth(this.year(), this.month()); |
| } |
| |
| var defaultMonthsShortRegex = matchWord; |
| function monthsShortRegex (isStrict) { |
| if (this._monthsParseExact) { |
| if (!hasOwnProp(this, '_monthsRegex')) { |
| computeMonthsParse.call(this); |
| } |
| if (isStrict) { |
| return this._monthsShortStrictRegex; |
| } else { |
| return this._monthsShortRegex; |
| } |
| } else { |
| if (!hasOwnProp(this, '_monthsShortRegex')) { |
| this._monthsShortRegex = defaultMonthsShortRegex; |
| } |
| return this._monthsShortStrictRegex && isStrict ? |
| this._monthsShortStrictRegex : this._monthsShortRegex; |
| } |
| } |
| |
| var defaultMonthsRegex = matchWord; |
| function monthsRegex (isStrict) { |
| if (this._monthsParseExact) { |
| if (!hasOwnProp(this, '_monthsRegex')) { |
| computeMonthsParse.call(this); |
| } |
| if (isStrict) { |
| return this._monthsStrictRegex; |
| } else { |
| return this._monthsRegex; |
| } |
| } else { |
| if (!hasOwnProp(this, '_monthsRegex')) { |
| this._monthsRegex = defaultMonthsRegex; |
| } |
| return this._monthsStrictRegex && isStrict ? |
| this._monthsStrictRegex : this._monthsRegex; |
| } |
| } |
| |
| function computeMonthsParse () { |
| function cmpLenRev(a, b) { |
| return b.length - a.length; |
| } |
| |
| var shortPieces = [], longPieces = [], mixedPieces = [], |
| i, mom; |
| for (i = 0; i < 12; i++) { |
| // make the regex if we don't have it already |
| mom = create_utc__createUTC([2000, i]); |
| shortPieces.push(this.monthsShort(mom, '')); |
| longPieces.push(this.months(mom, '')); |
| mixedPieces.push(this.months(mom, '')); |
| mixedPieces.push(this.monthsShort(mom, '')); |
| } |
| // Sorting makes sure if one month (or abbr) is a prefix of another it |
| // will match the longer piece. |
| shortPieces.sort(cmpLenRev); |
| longPieces.sort(cmpLenRev); |
| mixedPieces.sort(cmpLenRev); |
| for (i = 0; i < 12; i++) { |
| shortPieces[i] = regexEscape(shortPieces[i]); |
| longPieces[i] = regexEscape(longPieces[i]); |
| } |
| for (i = 0; i < 24; i++) { |
| mixedPieces[i] = regexEscape(mixedPieces[i]); |
| } |
| |
| this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); |
| this._monthsShortRegex = this._monthsRegex; |
| this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); |
| this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); |
| } |
| |
| // FORMATTING |
| |
| addFormatToken('Y', 0, 0, function () { |
| var y = this.year(); |
| return y <= 9999 ? '' + y : '+' + y; |
| }); |
| |
| addFormatToken(0, ['YY', 2], 0, function () { |
| return this.year() % 100; |
| }); |
| |
| addFormatToken(0, ['YYYY', 4], 0, 'year'); |
| addFormatToken(0, ['YYYYY', 5], 0, 'year'); |
| addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); |
| |
| // ALIASES |
| |
| addUnitAlias('year', 'y'); |
| |
| // PRIORITIES |
| |
| addUnitPriority('year', 1); |
| |
| // PARSING |
| |
| addRegexToken('Y', matchSigned); |
| addRegexToken('YY', match1to2, match2); |
| addRegexToken('YYYY', match1to4, match4); |
| addRegexToken('YYYYY', match1to6, match6); |
| addRegexToken('YYYYYY', match1to6, match6); |
| |
| addParseToken(['YYYYY', 'YYYYYY'], YEAR); |
| addParseToken('YYYY', function (input, array) { |
| array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input); |
| }); |
| addParseToken('YY', function (input, array) { |
| array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input); |
| }); |
| addParseToken('Y', function (input, array) { |
| array[YEAR] = parseInt(input, 10); |
| }); |
| |
| // HELPERS |
| |
| function daysInYear(year) { |
| return isLeapYear(year) ? 366 : 365; |
| } |
| |
| function isLeapYear(year) { |
| return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; |
| } |
| |
| // HOOKS |
| |
| utils_hooks__hooks.parseTwoDigitYear = function (input) { |
| return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); |
| }; |
| |
| // MOMENTS |
| |
| var getSetYear = makeGetSet('FullYear', true); |
| |
| function getIsLeapYear () { |
| return isLeapYear(this.year()); |
| } |
| |
| function createDate (y, m, d, h, M, s, ms) { |
| //can't just apply() to create a date: |
| //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply |
| var date = new Date(y, m, d, h, M, s, ms); |
| |
| //the date constructor remaps years 0-99 to 1900-1999 |
| if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { |
| date.setFullYear(y); |
| } |
| return date; |
| } |
| |
| function createUTCDate (y) { |
| var date = new Date(Date.UTC.apply(null, arguments)); |
| |
| //the Date.UTC function remaps years 0-99 to 1900-1999 |
| if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { |
| date.setUTCFullYear(y); |
| } |
| return date; |
| } |
| |
| // start-of-first-week - start-of-year |
| function firstWeekOffset(year, dow, doy) { |
| var // first-week day -- which january is always in the first week (4 for iso, 1 for other) |
| fwd = 7 + dow - doy, |
| // first-week day local weekday -- which local weekday is fwd |
| fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; |
| |
| return -fwdlw + fwd - 1; |
| } |
| |
| //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday |
| function dayOfYearFromWeeks(year, week, weekday, dow, doy) { |
| var localWeekday = (7 + weekday - dow) % 7, |
| weekOffset = firstWeekOffset(year, dow, doy), |
| dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, |
| resYear, resDayOfYear; |
| |
| if (dayOfYear <= 0) { |
| resYear = year - 1; |
| resDayOfYear = daysInYear(resYear) + dayOfYear; |
| } else if (dayOfYear > daysInYear(year)) { |
| resYear = year + 1; |
| resDayOfYear = dayOfYear - daysInYear(year); |
| } else { |
| resYear = year; |
| resDayOfYear = dayOfYear; |
| } |
| |
| return { |
| year: resYear, |
| dayOfYear: resDayOfYear |
| }; |
| } |
| |
| function weekOfYear(mom, dow, doy) { |
| var weekOffset = firstWeekOffset(mom.year(), dow, doy), |
| week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, |
| resWeek, resYear; |
| |
| if (week < 1) { |
| resYear = mom.year() - 1; |
| resWeek = week + weeksInYear(resYear, dow, doy); |
| } else if (week > weeksInYear(mom.year(), dow, doy)) { |
| resWeek = week - weeksInYear(mom.year(), dow, doy); |
| resYear = mom.year() + 1; |
| } else { |
| resYear = mom.year(); |
| resWeek = week; |
| } |
| |
| return { |
| week: resWeek, |
| year: resYear |
| }; |
| } |
| |
| function weeksInYear(year, dow, doy) { |
| var weekOffset = firstWeekOffset(year, dow, doy), |
| weekOffsetNext = firstWeekOffset(year + 1, dow, doy); |
| return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; |
| } |
| |
| // FORMATTING |
| |
| addFormatToken('w', ['ww', 2], 'wo', 'week'); |
| addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); |
| |
| // ALIASES |
| |
| addUnitAlias('week', 'w'); |
| addUnitAlias('isoWeek', 'W'); |
| |
| // PRIORITIES |
| |
| addUnitPriority('week', 5); |
| addUnitPriority('isoWeek', 5); |
| |
| // PARSING |
| |
| addRegexToken('w', match1to2); |
| addRegexToken('ww', match1to2, match2); |
| addRegexToken('W', match1to2); |
| addRegexToken('WW', match1to2, match2); |
| |
| addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { |
| week[token.substr(0, 1)] = toInt(input); |
| }); |
| |
| // HELPERS |
| |
| // LOCALES |
| |
| function localeWeek (mom) { |
| return weekOfYear(mom, this._week.dow, this._week.doy).week; |
| } |
| |
| var defaultLocaleWeek = { |
| dow : 0, // Sunday is the first day of the week. |
| doy : 6 // The week that contains Jan 1st is the first week of the year. |
| }; |
| |
| function localeFirstDayOfWeek () { |
| return this._week.dow; |
| } |
| |
| function localeFirstDayOfYear () { |
| return this._week.doy; |
| } |
| |
| // MOMENTS |
| |
| function getSetWeek (input) { |
| var week = this.localeData().week(this); |
| return input == null ? week : this.add((input - week) * 7, 'd'); |
| } |
| |
| function getSetISOWeek (input) { |
| var week = weekOfYear(this, 1, 4).week; |
| return input == null ? week : this.add((input - week) * 7, 'd'); |
| } |
| |
| // FORMATTING |
| |
| addFormatToken('d', 0, 'do', 'day'); |
| |
| addFormatToken('dd', 0, 0, function (format) { |
| return this.localeData().weekdaysMin(this, format); |
| }); |
| |
| addFormatToken('ddd', 0, 0, function (format) { |
| return this.localeData().weekdaysShort(this, format); |
| }); |
| |
| addFormatToken('dddd', 0, 0, function (format) { |
| return this.localeData().weekdays(this, format); |
| }); |
| |
| addFormatToken('e', 0, 0, 'weekday'); |
| addFormatToken('E', 0, 0, 'isoWeekday'); |
| |
| // ALIASES |
| |
| addUnitAlias('day', 'd'); |
| addUnitAlias('weekday', 'e'); |
| addUnitAlias('isoWeekday', 'E'); |
| |
| // PRIORITY |
| addUnitPriority('day', 11); |
| addUnitPriority('weekday', 11); |
| addUnitPriority('isoWeekday', 11); |
| |
| // PARSING |
| |
| addRegexToken('d', match1to2); |
| addRegexToken('e', match1to2); |
| addRegexToken('E', match1to2); |
| addRegexToken('dd', function (isStrict, locale) { |
| return locale.weekdaysMinRegex(isStrict); |
| }); |
| addRegexToken('ddd', function (isStrict, locale) { |
| return locale.weekdaysShortRegex(isStrict); |
| }); |
| addRegexToken('dddd', function (isStrict, locale) { |
| return locale.weekdaysRegex(isStrict); |
| }); |
| |
| addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { |
| var weekday = config._locale.weekdaysParse(input, token, config._strict); |
| // if we didn't get a weekday name, mark the date as invalid |
| if (weekday != null) { |
| week.d = weekday; |
| } else { |
| getParsingFlags(config).invalidWeekday = input; |
| } |
| }); |
| |
| addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { |
| week[token] = toInt(input); |
| }); |
| |
| // HELPERS |
| |
| function parseWeekday(input, locale) { |
| if (typeof input !== 'string') { |
| return input; |
| } |
| |
| if (!isNaN(input)) { |
| return parseInt(input, 10); |
| } |
| |
| input = locale.weekdaysParse(input); |
| if (typeof input === 'number') { |
| return input; |
| } |
| |
| return null; |
| } |
| |
| function parseIsoWeekday(input, locale) { |
| if (typeof input === 'string') { |
| return locale.weekdaysParse(input) % 7 || 7; |
| } |
| return isNaN(input) ? null : input; |
| } |
| |
| // LOCALES |
| |
| var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); |
| function localeWeekdays (m, format) { |
| return isArray(this._weekdays) ? this._weekdays[m.day()] : |
| this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()]; |
| } |
| |
| var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); |
| function localeWeekdaysShort (m) { |
| return this._weekdaysShort[m.day()]; |
| } |
| |
| var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); |
| function localeWeekdaysMin (m) { |
| return this._weekdaysMin[m.day()]; |
| } |
| |
| function day_of_week__handleStrictParse(weekdayName, format, strict) { |
| var i, ii, mom, llc = weekdayName.toLocaleLowerCase(); |
| if (!this._weekdaysParse) { |
| this._weekdaysParse = []; |
| this._shortWeekdaysParse = []; |
| this._minWeekdaysParse = []; |
| |
| for (i = 0; i < 7; ++i) { |
| mom = create_utc__createUTC([2000, 1]).day(i); |
| this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase(); |
| this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase(); |
| this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); |
| } |
| } |
| |
| if (strict) { |
| if (format === 'dddd') { |
| ii = indexOf.call(this._weekdaysParse, llc); |
| return ii !== -1 ? ii : null; |
| } else if (format === 'ddd') { |
| ii = indexOf.call(this._shortWeekdaysParse, llc); |
| return ii !== -1 ? ii : null; |
| } else { |
| ii = indexOf.call(this._minWeekdaysParse, llc); |
| return ii !== -1 ? ii : null; |
| } |
| } else { |
| if (format === 'dddd') { |
| ii = indexOf.call(this._weekdaysParse, llc); |
| if (ii !== -1) { |
| return ii; |
| } |
| ii = indexOf.call(this._shortWeekdaysParse, llc); |
| if (ii !== -1) { |
| return ii; |
| } |
| ii = indexOf.call(this._minWeekdaysParse, llc); |
| return ii !== -1 ? ii : null; |
| } else if (format === 'ddd') { |
| ii = indexOf.call(this._shortWeekdaysParse, llc); |
| if (ii !== -1) { |
| return ii; |
| } |
| ii = indexOf.call(this._weekdaysParse, llc); |
| if (ii !== -1) { |
| return ii; |
| } |
| ii = indexOf.call(this._minWeekdaysParse, llc); |
| return ii !== -1 ? ii : null; |
| } else { |
| ii = indexOf.call(this._minWeekdaysParse, llc); |
| if (ii !== -1) { |
| return ii; |
| } |
| ii = indexOf.call(this._weekdaysParse, llc); |
| if (ii !== -1) { |
| return ii; |
| } |
| ii = indexOf.call(this._shortWeekdaysParse, llc); |
| return ii !== -1 ? ii : null; |
| } |
| } |
| } |
| |
| function localeWeekdaysParse (weekdayName, format, strict) { |
| var i, mom, regex; |
| |
| if (this._weekdaysParseExact) { |
| return day_of_week__handleStrictParse.call(this, weekdayName, format, strict); |
| } |
| |
| if (!this._weekdaysParse) { |
| this._weekdaysParse = []; |
| this._minWeekdaysParse = []; |
| this._shortWeekdaysParse = []; |
| this._fullWeekdaysParse = []; |
| } |
| |
| for (i = 0; i < 7; i++) { |
| // make the regex if we don't have it already |
| |
| mom = create_utc__createUTC([2000, 1]).day(i); |
| if (strict && !this._fullWeekdaysParse[i]) { |
| this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i'); |
| this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i'); |
| this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i'); |
| } |
| if (!this._weekdaysParse[i]) { |
| regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); |
| this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); |
| } |
| // test the regex |
| if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) { |
| return i; |
| } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) { |
| return i; |
| } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) { |
| return i; |
| } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { |
| return i; |
| } |
| } |
| } |
| |
| // MOMENTS |
| |
| function getSetDayOfWeek (input) { |
| if (!this.isValid()) { |
| return input != null ? this : NaN; |
| } |
| var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); |
| if (input != null) { |
| input = parseWeekday(input, this.localeData()); |
| return this.add(input - day, 'd'); |
| } else { |
| return day; |
| } |
| } |
| |
| function getSetLocaleDayOfWeek (input) { |
| if (!this.isValid()) { |
| return input != null ? this : NaN; |
| } |
| var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; |
| return input == null ? weekday : this.add(input - weekday, 'd'); |
| } |
| |
| function getSetISODayOfWeek (input) { |
| if (!this.isValid()) { |
| return input != null ? this : NaN; |
| } |
| |
| // behaves the same as moment#day except |
| // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) |
| // as a setter, sunday should belong to the previous week. |
| |
| if (input != null) { |
| var weekday = parseIsoWeekday(input, this.localeData()); |
| return this.day(this.day() % 7 ? weekday : weekday - 7); |
| } else { |
| return this.day() || 7; |
| } |
| } |
| |
| var defaultWeekdaysRegex = matchWord; |
| function weekdaysRegex (isStrict) { |
| if (this._weekdaysParseExact) { |
| if (!hasOwnProp(this, '_weekdaysRegex')) { |
| computeWeekdaysParse.call(this); |
| } |
| if (isStrict) { |
| return this._weekdaysStrictRegex; |
| } else { |
| return this._weekdaysRegex; |
| } |
| } else { |
| if (!hasOwnProp(this, '_weekdaysRegex')) { |
| this._weekdaysRegex = defaultWeekdaysRegex; |
| } |
| return this._weekdaysStrictRegex && isStrict ? |
| this._weekdaysStrictRegex : this._weekdaysRegex; |
| } |
| } |
| |
| var defaultWeekdaysShortRegex = matchWord; |
| function weekdaysShortRegex (isStrict) { |
| if (this._weekdaysParseExact) { |
| if (!hasOwnProp(this, '_weekdaysRegex')) { |
| computeWeekdaysParse.call(this); |
| } |
| if (isStrict) { |
| return this._weekdaysShortStrictRegex; |
| } else { |
| return this._weekdaysShortRegex; |
| } |
| } else { |
| if (!hasOwnProp(this, '_weekdaysShortRegex')) { |
| this._weekdaysShortRegex = defaultWeekdaysShortRegex; |
| } |
| return this._weekdaysShortStrictRegex && isStrict ? |
| this._weekdaysShortStrictRegex : this._weekdaysShortRegex; |
| } |
| } |
| |
| var defaultWeekdaysMinRegex = matchWord; |
| function weekdaysMinRegex (isStrict) { |
| if (this._weekdaysParseExact) { |
| if (!hasOwnProp(this, '_weekdaysRegex')) { |
| computeWeekdaysParse.call(this); |
| } |
| if (isStrict) { |
| return this._weekdaysMinStrictRegex; |
| } else { |
| return this._weekdaysMinRegex; |
| } |
| } else { |
| if (!hasOwnProp(this, '_weekdaysMinRegex')) { |
| this._weekdaysMinRegex = defaultWeekdaysMinRegex; |
| } |
| return this._weekdaysMinStrictRegex && isStrict ? |
| this._weekdaysMinStrictRegex : this._weekdaysMinRegex; |
| } |
| } |
| |
| |
| function computeWeekdaysParse () { |
| function cmpLenRev(a, b) { |
| return b.length - a.length; |
| } |
| |
| var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], |
| i, mom, minp, shortp, longp; |
| for (i = 0; i < 7; i++) { |
| // make the regex if we don't have it already |
| mom = create_utc__createUTC([2000, 1]).day(i); |
| minp = this.weekdaysMin(mom, ''); |
| shortp = this.weekdaysShort(mom, ''); |
| longp = this.weekdays(mom, ''); |
| minPieces.push(minp); |
| shortPieces.push(shortp); |
| longPieces.push(longp); |
| mixedPieces.push(minp); |
| mixedPieces.push(shortp); |
| mixedPieces.push(longp); |
| } |
| // Sorting makes sure if one weekday (or abbr) is a prefix of another it |
| // will match the longer piece. |
| minPieces.sort(cmpLenRev); |
| shortPieces.sort(cmpLenRev); |
| longPieces.sort(cmpLenRev); |
| mixedPieces.sort(cmpLenRev); |
| for (i = 0; i < 7; i++) { |
| shortPieces[i] = regexEscape(shortPieces[i]); |
| longPieces[i] = regexEscape(longPieces[i]); |
| mixedPieces[i] = regexEscape(mixedPieces[i]); |
| } |
| |
| this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); |
| this._weekdaysShortRegex = this._weekdaysRegex; |
| this._weekdaysMinRegex = this._weekdaysRegex; |
| |
| this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); |
| this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); |
| this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i'); |
| } |
| |
| // FORMATTING |
| |
| function hFormat() { |
| return this.hours() % 12 || 12; |
| } |
| |
| function kFormat() { |
| return this.hours() || 24; |
| } |
| |
| addFormatToken('H', ['HH', 2], 0, 'hour'); |
| addFormatToken('h', ['hh', 2], 0, hFormat); |
| addFormatToken('k', ['kk', 2], 0, kFormat); |
| |
| addFormatToken('hmm', 0, 0, function () { |
| return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); |
| }); |
| |
| addFormatToken('hmmss', 0, 0, function () { |
| return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + |
| zeroFill(this.seconds(), 2); |
| }); |
| |
| addFormatToken('Hmm', 0, 0, function () { |
| return '' + this.hours() + zeroFill(this.minutes(), 2); |
| }); |
| |
| addFormatToken('Hmmss', 0, 0, function () { |
| return '' + this.hours() + zeroFill(this.minutes(), 2) + |
| zeroFill(this.seconds(), 2); |
| }); |
| |
| function meridiem (token, lowercase) { |
| addFormatToken(token, 0, 0, function () { |
| return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); |
| }); |
| } |
| |
| meridiem('a', true); |
| meridiem('A', false); |
| |
| // ALIASES |
| |
| addUnitAlias('hour', 'h'); |
| |
| // PRIORITY |
| addUnitPriority('hour', 13); |
| |
| // PARSING |
| |
| function matchMeridiem (isStrict, locale) { |
| return locale._meridiemParse; |
| } |
| |
| addRegexToken('a', matchMeridiem); |
| addRegexToken('A', matchMeridiem); |
| addRegexToken('H', match1to2); |
| addRegexToken('h', match1to2); |
| addRegexToken('HH', match1to2, match2); |
| addRegexToken('hh', match1to2, match2); |
| |
| addRegexToken('hmm', match3to4); |
| addRegexToken('hmmss', match5to6); |
| addRegexToken('Hmm', match3to4); |
| addRegexToken('Hmmss', match5to6); |
| |
| addParseToken(['H', 'HH'], HOUR); |
| addParseToken(['a', 'A'], function (input, array, config) { |
| config._isPm = config._locale.isPM(input); |
| config._meridiem = input; |
| }); |
| addParseToken(['h', 'hh'], function (input, array, config) { |
| array[HOUR] = toInt(input); |
| getParsingFlags(config).bigHour = true; |
| }); |
| addParseToken('hmm', function (input, array, config) { |
| var pos = input.length - 2; |
| array[HOUR] = toInt(input.substr(0, pos)); |
| array[MINUTE] = toInt(input.substr(pos)); |
| getParsingFlags(config).bigHour = true; |
| }); |
| addParseToken('hmmss', function (input, array, config) { |
| var pos1 = input.length - 4; |
| var pos2 = input.length - 2; |
| array[HOUR] = toInt(input.substr(0, pos1)); |
| array[MINUTE] = toInt(input.substr(pos1, 2)); |
| array[SECOND] = toInt(input.substr(pos2)); |
| getParsingFlags(config).bigHour = true; |
| }); |
| addParseToken('Hmm', function (input, array, config) { |
| var pos = input.length - 2; |
| array[HOUR] = toInt(input.substr(0, pos)); |
| array[MINUTE] = toInt(input.substr(pos)); |
| }); |
| addParseToken('Hmmss', function (input, array, config) { |
| var pos1 = input.length - 4; |
| var pos2 = input.length - 2; |
| array[HOUR] = toInt(input.substr(0, pos1)); |
| array[MINUTE] = toInt(input.substr(pos1, 2)); |
| array[SECOND] = toInt(input.substr(pos2)); |
| }); |
| |
| // LOCALES |
| |
| function localeIsPM (input) { |
| // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays |
| // Using charAt should be more compatible. |
| return ((input + '').toLowerCase().charAt(0) === 'p'); |
| } |
| |
| var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; |
| function localeMeridiem (hours, minutes, isLower) { |
| if (hours > 11) { |
| return isLower ? 'pm' : 'PM'; |
| } else { |
| return isLower ? 'am' : 'AM'; |
| } |
| } |
| |
| |
| // MOMENTS |
| |
| // Setting the hour should keep the time, because the user explicitly |
| // specified which hour he wants. So trying to maintain the same hour (in |
| // a new timezone) makes sense. Adding/subtracting hours does not follow |
| // this rule. |
| var getSetHour = makeGetSet('Hours', true); |
| |
| var baseConfig = { |
| calendar: defaultCalendar, |
| longDateFormat: defaultLongDateFormat, |
| invalidDate: defaultInvalidDate, |
| ordinal: defaultOrdinal, |
| ordinalParse: defaultOrdinalParse, |
| relativeTime: defaultRelativeTime, |
| |
| months: defaultLocaleMonths, |
| monthsShort: defaultLocaleMonthsShort, |
| |
| week: defaultLocaleWeek, |
| |
| weekdays: defaultLocaleWeekdays, |
| weekdaysMin: defaultLocaleWeekdaysMin, |
| weekdaysShort: defaultLocaleWeekdaysShort, |
| |
| meridiemParse: defaultLocaleMeridiemParse |
| }; |
| |
| // internal storage for locale config files |
| var locales = {}; |
| var globalLocale; |
| |
| function normalizeLocale(key) { |
| return key ? key.toLowerCase().replace('_', '-') : key; |
| } |
| |
| // pick the locale from the array |
| // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each |
| // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root |
| function chooseLocale(names) { |
| var i = 0, j, next, locale, split; |
| |
| while (i < names.length) { |
| split = normalizeLocale(names[i]).split('-'); |
| j = split.length; |
| next = normalizeLocale(names[i + 1]); |
| next = next ? next.split('-') : null; |
| while (j > 0) { |
| locale = loadLocale(split.slice(0, j).join('-')); |
| if (locale) { |
| return locale; |
| } |
| if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { |
| //the next array item is better than a shallower substring of this one |
| break; |
| } |
| j--; |
| } |
| i++; |
| } |
| return null; |
| } |
| |
| function loadLocale(name) { |
| var oldLocale = null; |
| // TODO: Find a better way to register and load all the locales in Node |
| if (!locales[name] && (typeof module !== 'undefined') && |
| module && module.exports) { |
| try { |
| oldLocale = globalLocale._abbr; |
| _dereq_('./locale/' + name); |
| // because defineLocale currently also sets the global locale, we |
| // want to undo that for lazy loaded locales |
| locale_locales__getSetGlobalLocale(oldLocale); |
| } catch (e) { } |
| } |
| return locales[name]; |
| } |
| |
| // This function will load locale and then set the global locale. If |
| // no arguments are passed in, it will simply return the current global |
| // locale key. |
| function locale_locales__getSetGlobalLocale (key, values) { |
| var data; |
| if (key) { |
| if (isUndefined(values)) { |
| data = locale_locales__getLocale(key); |
| } |
| else { |
| data = defineLocale(key, values); |
| } |
| |
| if (data) { |
| // moment.duration._locale = moment._locale = data; |
| globalLocale = data; |
| } |
| } |
| |
| return globalLocale._abbr; |
| } |
| |
| function defineLocale (name, config) { |
| if (config !== null) { |
| var parentConfig = baseConfig; |
| config.abbr = name; |
| if (locales[name] != null) { |
| deprecateSimple('defineLocaleOverride', |
| 'use moment.updateLocale(localeName, config) to change ' + |
| 'an existing locale. moment.defineLocale(localeName, ' + |
| 'config) should only be used for creating a new locale ' + |
| 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'); |
| parentConfig = locales[name]._config; |
| } else if (config.parentLocale != null) { |
| if (locales[config.parentLocale] != null) { |
| parentConfig = locales[config.parentLocale]._config; |
| } else { |
| // treat as if there is no base config |
| deprecateSimple('parentLocaleUndefined', |
| 'specified parentLocale is not defined yet. See http://momentjs.com/guides/#/warnings/parent-locale/'); |
| } |
| } |
| locales[name] = new Locale(mergeConfigs(parentConfig, config)); |
| |
| // backwards compat for now: also set the locale |
| locale_locales__getSetGlobalLocale(name); |
| |
| return locales[name]; |
| } else { |
| // useful for testing |
| delete locales[name]; |
| return null; |
| } |
| } |
| |
| function updateLocale(name, config) { |
| if (config != null) { |
| var locale, parentConfig = baseConfig; |
| // MERGE |
| if (locales[name] != null) { |
| parentConfig = locales[name]._config; |
| } |
| config = mergeConfigs(parentConfig, config); |
| locale = new Locale(config); |
| locale.parentLocale = locales[name]; |
| locales[name] = locale; |
| |
| // backwards compat for now: also set the locale |
| locale_locales__getSetGlobalLocale(name); |
| } else { |
| // pass null for config to unupdate, useful for tests |
| if (locales[name] != null) { |
| if (locales[name].parentLocale != null) { |
| locales[name] = locales[name].parentLocale; |
| } else if (locales[name] != null) { |
| delete locales[name]; |
| } |
| } |
| } |
| return locales[name]; |
| } |
| |
| // returns locale data |
| function locale_locales__getLocale (key) { |
| var locale; |
| |
| if (key && key._locale && key._locale._abbr) { |
| key = key._locale._abbr; |
| } |
| |
| if (!key) { |
| return globalLocale; |
| } |
| |
| if (!isArray(key)) { |
| //short-circuit everything else |
| locale = loadLocale(key); |
| if (locale) { |
| return locale; |
| } |
| key = [key]; |
| } |
| |
| return chooseLocale(key); |
| } |
| |
| function locale_locales__listLocales() { |
| return keys(locales); |
| } |
| |
| function checkOverflow (m) { |
| var overflow; |
| var a = m._a; |
| |
| if (a && getParsingFlags(m).overflow === -2) { |
| overflow = |
| a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : |
| a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : |
| a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : |
| a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : |
| a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : |
| a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : |
| -1; |
| |
| if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { |
| overflow = DATE; |
| } |
| if (getParsingFlags(m)._overflowWeeks && overflow === -1) { |
| overflow = WEEK; |
| } |
| if (getParsingFlags(m)._overflowWeekday && overflow === -1) { |
| overflow = WEEKDAY; |
| } |
| |
| getParsingFlags(m).overflow = overflow; |
| } |
| |
| return m; |
| } |
| |
| // iso 8601 regex |
| // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) |
| var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/; |
| var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/; |
| |
| var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; |
| |
| var isoDates = [ |
| ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], |
| ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], |
| ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], |
| ['GGGG-[W]WW', /\d{4}-W\d\d/, false], |
| ['YYYY-DDD', /\d{4}-\d{3}/], |
| ['YYYY-MM', /\d{4}-\d\d/, false], |
| ['YYYYYYMMDD', /[+-]\d{10}/], |
| ['YYYYMMDD', /\d{8}/], |
| // YYYYMM is NOT allowed by the standard |
| ['GGGG[W]WWE', /\d{4}W\d{3}/], |
| ['GGGG[W]WW', /\d{4}W\d{2}/, false], |
| ['YYYYDDD', /\d{7}/] |
| ]; |
| |
| // iso time formats and regexes |
| var isoTimes = [ |
| ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], |
| ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], |
| ['HH:mm:ss', /\d\d:\d\d:\d\d/], |
| ['HH:mm', /\d\d:\d\d/], |
| ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], |
| ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], |
| ['HHmmss', /\d\d\d\d\d\d/], |
| ['HHmm', /\d\d\d\d/], |
| ['HH', /\d\d/] |
| ]; |
| |
| var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; |
| |
| // date from iso format |
| function configFromISO(config) { |
| var i, l, |
| string = config._i, |
| match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), |
| allowTime, dateFormat, timeFormat, tzFormat; |
| |
| if (match) { |
| getParsingFlags(config).iso = true; |
| |
| for (i = 0, l = isoDates.length; i < l; i++) { |
| if (isoDates[i][1].exec(match[1])) { |
| dateFormat = isoDates[i][0]; |
| allowTime = isoDates[i][2] !== false; |
| break; |
| } |
| } |
| if (dateFormat == null) { |
| config._isValid = false; |
| return; |
| } |
| if (match[3]) { |
| for (i = 0, l = isoTimes.length; i < l; i++) { |
| if (isoTimes[i][1].exec(match[3])) { |
| // match[2] should be 'T' or space |
| timeFormat = (match[2] || ' ') + isoTimes[i][0]; |
| break; |
| } |
| } |
| if (timeFormat == null) { |
| config._isValid = false; |
| return; |
| } |
| } |
| if (!allowTime && timeFormat != null) { |
| config._isValid = false; |
| return; |
| } |
| if (match[4]) { |
| if (tzRegex.exec(match[4])) { |
| tzFormat = 'Z'; |
| } else { |
| config._isValid = false; |
| return; |
| } |
| } |
| config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); |
| configFromStringAndFormat(config); |
| } else { |
| config._isValid = false; |
| } |
| } |
| |
| // date from iso format or fallback |
| function configFromString(config) { |
| var matched = aspNetJsonRegex.exec(config._i); |
| |
| if (matched !== null) { |
| config._d = new Date(+matched[1]); |
| return; |
| } |
| |
| configFromISO(config); |
| if (config._isValid === false) { |
| delete config._isValid; |
| utils_hooks__hooks.createFromInputFallback(config); |
| } |
| } |
| |
| utils_hooks__hooks.createFromInputFallback = deprecate( |
| 'moment construction falls back to js Date. This is ' + |
| 'discouraged and will be removed in upcoming major ' + |
| 'release. Please refer to ' + |
| 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', |
| function (config) { |
| config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); |
| } |
| ); |
| |
| // Pick the first defined of two or three arguments. |
| function defaults(a, b, c) { |
| if (a != null) { |
| return a; |
| } |
| if (b != null) { |
| return b; |
| } |
| return c; |
| } |
| |
| function currentDateArray(config) { |
| // hooks is actually the exported moment object |
| var nowValue = new Date(utils_hooks__hooks.now()); |
| if (config._useUTC) { |
| return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; |
| } |
| return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; |
| } |
| |
| // convert an array to a date. |
| // the array should mirror the parameters below |
| // note: all values past the year are optional and will default to the lowest possible value. |
| // [year, month, day , hour, minute, second, millisecond] |
| function configFromArray (config) { |
| var i, date, input = [], currentDate, yearToUse; |
| |
| if (config._d) { |
| return; |
| } |
| |
| currentDate = currentDateArray(config); |
| |
| //compute day of the year from weeks and weekdays |
| if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { |
| dayOfYearFromWeekInfo(config); |
| } |
| |
| //if the day of the year is set, figure out what it is |
| if (config._dayOfYear) { |
| yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); |
| |
| if (config._dayOfYear > daysInYear(yearToUse)) { |
| getParsingFlags(config)._overflowDayOfYear = true; |
| } |
| |
| date = createUTCDate(yearToUse, 0, config._dayOfYear); |
| config._a[MONTH] = date.getUTCMonth(); |
| config._a[DATE] = date.getUTCDate(); |
| } |
| |
| // Default to current date. |
| // * if no year, month, day of month are given, default to today |
| // * if day of month is given, default month and year |
| // * if month is given, default only year |
| // * if year is given, don't default anything |
| for (i = 0; i < 3 && config._a[i] == null; ++i) { |
| config._a[i] = input[i] = currentDate[i]; |
| } |
| |
| // Zero out whatever was not defaulted, including time |
| for (; i < 7; i++) { |
| config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; |
| } |
| |
| // Check for 24:00:00.000 |
| if (config._a[HOUR] === 24 && |
| config._a[MINUTE] === 0 && |
| config._a[SECOND] === 0 && |
| config._a[MILLISECOND] === 0) { |
| config._nextDay = true; |
| config._a[HOUR] = 0; |
| } |
| |
| config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); |
| // Apply timezone offset from input. The actual utcOffset can be changed |
| // with parseZone. |
| if (config._tzm != null) { |
| config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); |
| } |
| |
| if (config._nextDay) { |
| config._a[HOUR] = 24; |
| } |
| } |
| |
| function dayOfYearFromWeekInfo(config) { |
| var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; |
| |
| w = config._w; |
| if (w.GG != null || w.W != null || w.E != null) { |
| dow = 1; |
| doy = 4; |
| |
| // TODO: We need to take the current isoWeekYear, but that depends on |
| // how we interpret now (local, utc, fixed offset). So create |
| // a now version of current config (take local/utc/offset flags, and |
| // create now). |
| weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year); |
| week = defaults(w.W, 1); |
| weekday = defaults(w.E, 1); |
| if (weekday < 1 || weekday > 7) { |
| weekdayOverflow = true; |
| } |
| } else { |
| dow = config._locale._week.dow; |
| doy = config._locale._week.doy; |
| |
| weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year); |
| week = defaults(w.w, 1); |
| |
| if (w.d != null) { |
| // weekday -- low day numbers are considered next week |
| weekday = w.d; |
| if (weekday < 0 || weekday > 6) { |
| weekdayOverflow = true; |
| } |
| } else if (w.e != null) { |
| // local weekday -- counting starts from begining of week |
| weekday = w.e + dow; |
| if (w.e < 0 || w.e > 6) { |
| weekdayOverflow = true; |
| } |
| } else { |
| // default to begining of week |
| weekday = dow; |
| } |
| } |
| if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { |
| getParsingFlags(config)._overflowWeeks = true; |
| } else if (weekdayOverflow != null) { |
| getParsingFlags(config)._overflowWeekday = true; |
| } else { |
| temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); |
| config._a[YEAR] = temp.year; |
| config._dayOfYear = temp.dayOfYear; |
| } |
| } |
| |
| // constant that refers to the ISO standard |
| utils_hooks__hooks.ISO_8601 = function () {}; |
| |
| // date from string and format string |
| function configFromStringAndFormat(config) { |
| // TODO: Move this to another part of the creation flow to prevent circular deps |
| if (config._f === utils_hooks__hooks.ISO_8601) { |
| configFromISO(config); |
| return; |
| } |
| |
| config._a = []; |
| getParsingFlags(config).empty = true; |
| |
| // This array is used to make a Date, either with `new Date` or `Date.UTC` |
| var string = '' + config._i, |
| i, parsedInput, tokens, token, skipped, |
| stringLength = string.length, |
| totalParsedInputLength = 0; |
| |
| tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; |
| |
| for (i = 0; i < tokens.length; i++) { |
| token = tokens[i]; |
| parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; |
| // console.log('token', token, 'parsedInput', parsedInput, |
| // 'regex', getParseRegexForToken(token, config)); |
| if (parsedInput) { |
| skipped = string.substr(0, string.indexOf(parsedInput)); |
| if (skipped.length > 0) { |
| getParsingFlags(config).unusedInput.push(skipped); |
| } |
| string = string.slice(string.indexOf(parsedInput) + parsedInput.length); |
| totalParsedInputLength += parsedInput.length; |
| } |
| // don't parse if it's not a known token |
| if (formatTokenFunctions[token]) { |
| if (parsedInput) { |
| getParsingFlags(config).empty = false; |
| } |
| else { |
| getParsingFlags(config).unusedTokens.push(token); |
| } |
| addTimeToArrayFromToken(token, parsedInput, config); |
| } |
| else if (config._strict && !parsedInput) { |
| getParsingFlags(config).unusedTokens.push(token); |
| } |
| } |
| |
| // add remaining unparsed input length to the string |
| getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; |
| if (string.length > 0) { |
| getParsingFlags(config).unusedInput.push(string); |
| } |
| |
| // clear _12h flag if hour is <= 12 |
| if (config._a[HOUR] <= 12 && |
| getParsingFlags(config).bigHour === true && |
| config._a[HOUR] > 0) { |
| getParsingFlags(config).bigHour = undefined; |
| } |
| |
| getParsingFlags(config).parsedDateParts = config._a.slice(0); |
| getParsingFlags(config).meridiem = config._meridiem; |
| // handle meridiem |
| config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); |
| |
| configFromArray(config); |
| checkOverflow(config); |
| } |
| |
| |
| function meridiemFixWrap (locale, hour, meridiem) { |
| var isPm; |
| |
| if (meridiem == null) { |
| // nothing to do |
| return hour; |
| } |
| if (locale.meridiemHour != null) { |
| return locale.meridiemHour(hour, meridiem); |
| } else if (locale.isPM != null) { |
| // Fallback |
| isPm = locale.isPM(meridiem); |
| if (isPm && hour < 12) { |
| hour += 12; |
| } |
| if (!isPm && hour === 12) { |
| hour = 0; |
| } |
| return hour; |
| } else { |
| // this is not supposed to happen |
| return hour; |
| } |
| } |
| |
| // date from string and array of format strings |
| function configFromStringAndArray(config) { |
| var tempConfig, |
| bestMoment, |
| |
| scoreToBeat, |
| i, |
| currentScore; |
| |
| if (config._f.length === 0) { |
| getParsingFlags(config).invalidFormat = true; |
| config._d = new Date(NaN); |
| return; |
| } |
| |
| for (i = 0; i < config._f.length; i++) { |
| currentScore = 0; |
| tempConfig = copyConfig({}, config); |
| if (config._useUTC != null) { |
| tempConfig._useUTC = config._useUTC; |
| } |
| tempConfig._f = config._f[i]; |
| configFromStringAndFormat(tempConfig); |
| |
| if (!valid__isValid(tempConfig)) { |
| continue; |
| } |
| |
| // if there is any input that was not parsed add a penalty for that format |
| currentScore += getParsingFlags(tempConfig).charsLeftOver; |
| |
| //or tokens |
| currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; |
| |
| getParsingFlags(tempConfig).score = currentScore; |
| |
| if (scoreToBeat == null || currentScore < scoreToBeat) { |
| scoreToBeat = currentScore; |
| bestMoment = tempConfig; |
| } |
| } |
| |
| extend(config, bestMoment || tempConfig); |
| } |
| |
| function configFromObject(config) { |
| if (config._d) { |
| return; |
| } |
| |
| var i = normalizeObjectUnits(config._i); |
| config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { |
| return obj && parseInt(obj, 10); |
| }); |
| |
| configFromArray(config); |
| } |
| |
| function createFromConfig (config) { |
| var res = new Moment(checkOverflow(prepareConfig(config))); |
| if (res._nextDay) { |
| // Adding is smart enough around DST |
| res.add(1, 'd'); |
| res._nextDay = undefined; |
| } |
| |
| return res; |
| } |
| |
| function prepareConfig (config) { |
| var input = config._i, |
| format = config._f; |
| |
| config._locale = config._locale || locale_locales__getLocale(config._l); |
| |
| if (input === null || (format === undefined && input === '')) { |
| return valid__createInvalid({nullInput: true}); |
| } |
| |
| if (typeof input === 'string') { |
| config._i = input = config._locale.preparse(input); |
| } |
| |
| if (isMoment(input)) { |
| return new Moment(checkOverflow(input)); |
| } else if (isArray(format)) { |
| configFromStringAndArray(config); |
| } else if (isDate(input)) { |
| config._d = input; |
| } else if (format) { |
| configFromStringAndFormat(config); |
| } else { |
| configFromInput(config); |
| } |
| |
| if (!valid__isValid(config)) { |
| config._d = null; |
| } |
| |
| return config; |
| } |
| |
| function configFromInput(config) { |
| var input = config._i; |
| if (input === undefined) { |
| config._d = new Date(utils_hooks__hooks.now()); |
| } else if (isDate(input)) { |
| config._d = new Date(input.valueOf()); |
| } else if (typeof input === 'string') { |
| configFromString(config); |
| } else if (isArray(input)) { |
| config._a = map(input.slice(0), function (obj) { |
| return parseInt(obj, 10); |
| }); |
| configFromArray(config); |
| } else if (typeof(input) === 'object') { |
| configFromObject(config); |
| } else if (typeof(input) === 'number') { |
| // from milliseconds |
| config._d = new Date(input); |
| } else { |
| utils_hooks__hooks.createFromInputFallback(config); |
| } |
| } |
| |
| function createLocalOrUTC (input, format, locale, strict, isUTC) { |
| var c = {}; |
| |
| if (typeof(locale) === 'boolean') { |
| strict = locale; |
| locale = undefined; |
| } |
| |
| if ((isObject(input) && isObjectEmpty(input)) || |
| (isArray(input) && input.length === 0)) { |
| input = undefined; |
| } |
| // object construction must be done this way. |
| // https://github.com/moment/moment/issues/1423 |
| c._isAMomentObject = true; |
| c._useUTC = c._isUTC = isUTC; |
| c._l = locale; |
| c._i = input; |
| c._f = format; |
| c._strict = strict; |
| |
| return createFromConfig(c); |
| } |
| |
| function local__createLocal (input, format, locale, strict) { |
| return createLocalOrUTC(input, format, locale, strict, false); |
| } |
| |
| var prototypeMin = deprecate( |
| 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', |
| function () { |
| var other = local__createLocal.apply(null, arguments); |
| if (this.isValid() && other.isValid()) { |
| return other < this ? this : other; |
| } else { |
| return valid__createInvalid(); |
| } |
| } |
| ); |
| |
| var prototypeMax = deprecate( |
| 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', |
| function () { |
| var other = local__createLocal.apply(null, arguments); |
| if (this.isValid() && other.isValid()) { |
| return other > this ? this : other; |
| } else { |
| return valid__createInvalid(); |
| } |
| } |
| ); |
| |
| // Pick a moment m from moments so that m[fn](other) is true for all |
| // other. This relies on the function fn to be transitive. |
| // |
| // moments should either be an array of moment objects or an array, whose |
| // first element is an array of moment objects. |
| function pickBy(fn, moments) { |
| var res, i; |
| if (moments.length === 1 && isArray(moments[0])) { |
| moments = moments[0]; |
| } |
| if (!moments.length) { |
| return local__createLocal(); |
| } |
| res = moments[0]; |
| for (i = 1; i < moments.length; ++i) { |
| if (!moments[i].isValid() || moments[i][fn](res)) { |
| res = moments[i]; |
| } |
| } |
| return res; |
| } |
| |
| // TODO: Use [].sort instead? |
| function min () { |
| var args = [].slice.call(arguments, 0); |
| |
| return pickBy('isBefore', args); |
| } |
| |
| function max () { |
| var args = [].slice.call(arguments, 0); |
| |
| return pickBy('isAfter', args); |
| } |
| |
| var now = function () { |
| return Date.now ? Date.now() : +(new Date()); |
| }; |
| |
| function Duration (duration) { |
| var normalizedInput = normalizeObjectUnits(duration), |
| years = normalizedInput.year || 0, |
| quarters = normalizedInput.quarter || 0, |
| months = normalizedInput.month || 0, |
| weeks = normalizedInput.week || 0, |
| days = normalizedInput.day || 0, |
| hours = normalizedInput.hour || 0, |
| minutes = normalizedInput.minute || 0, |
| seconds = normalizedInput.second || 0, |
| milliseconds = normalizedInput.millisecond || 0; |
| |
| // representation for dateAddRemove |
| this._milliseconds = +milliseconds + |
| seconds * 1e3 + // 1000 |
| minutes * 6e4 + // 1000 * 60 |
| hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 |
| // Because of dateAddRemove treats 24 hours as different from a |
| // day when working around DST, we need to store them separately |
| this._days = +days + |
| weeks * 7; |
| // It is impossible translate months into days without knowing |
| // which months you are are talking about, so we have to store |
| // it separately. |
| this._months = +months + |
| quarters * 3 + |
| years * 12; |
| |
| this._data = {}; |
| |
| this._locale = locale_locales__getLocale(); |
| |
| this._bubble(); |
| } |
| |
| function isDuration (obj) { |
| return obj instanceof Duration; |
| } |
| |
| // FORMATTING |
| |
| function offset (token, separator) { |
| addFormatToken(token, 0, 0, function () { |
| var offset = this.utcOffset(); |
| var sign = '+'; |
| if (offset < 0) { |
| offset = -offset; |
| sign = '-'; |
| } |
| return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); |
| }); |
| } |
| |
| offset('Z', ':'); |
| offset('ZZ', ''); |
| |
| // PARSING |
| |
| addRegexToken('Z', matchShortOffset); |
| addRegexToken('ZZ', matchShortOffset); |
| addParseToken(['Z', 'ZZ'], function (input, array, config) { |
| config._useUTC = true; |
| config._tzm = offsetFromString(matchShortOffset, input); |
| }); |
| |
| // HELPERS |
| |
| // timezone chunker |
| // '+10:00' > ['10', '00'] |
| // '-1530' > ['-15', '30'] |
| var chunkOffset = /([\+\-]|\d\d)/gi; |
| |
| function offsetFromString(matcher, string) { |
| var matches = ((string || '').match(matcher) || []); |
| var chunk = matches[matches.length - 1] || []; |
| var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; |
| var minutes = +(parts[1] * 60) + toInt(parts[2]); |
| |
| return parts[0] === '+' ? minutes : -minutes; |
| } |
| |
| // Return a moment from input, that is local/utc/zone equivalent to model. |
| function cloneWithOffset(input, model) { |
| var res, diff; |
| if (model._isUTC) { |
| res = model.clone(); |
| diff = (isMoment(input) || isDate(input) ? input.valueOf() : local__createLocal(input).valueOf()) - res.valueOf(); |
| // Use low-level api, because this fn is low-level api. |
| res._d.setTime(res._d.valueOf() + diff); |
| utils_hooks__hooks.updateOffset(res, false); |
| return res; |
| } else { |
| return local__createLocal(input).local(); |
| } |
| } |
| |
| function getDateOffset (m) { |
| // On Firefox.24 Date#getTimezoneOffset returns a floating point. |
| // https://github.com/moment/moment/pull/1871 |
| return -Math.round(m._d.getTimezoneOffset() / 15) * 15; |
| } |
| |
| // HOOKS |
| |
| // This function will be called whenever a moment is mutated. |
| // It is intended to keep the offset in sync with the timezone. |
| utils_hooks__hooks.updateOffset = function () {}; |
| |
| // MOMENTS |
| |
| // keepLocalTime = true means only change the timezone, without |
| // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> |
| // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset |
| // +0200, so we adjust the time as needed, to be valid. |
| // |
| // Keeping the time actually adds/subtracts (one hour) |
| // from the actual represented time. That is why we call updateOffset |
| // a second time. In case it wants us to change the offset again |
| // _changeInProgress == true case, then we have to adjust, because |
| // there is no such time in the given timezone. |
| function getSetOffset (input, keepLocalTime) { |
| var offset = this._offset || 0, |
| localAdjust; |
| if (!this.isValid()) { |
| return input != null ? this : NaN; |
| } |
| if (input != null) { |
| if (typeof input === 'string') { |
| input = offsetFromString(matchShortOffset, input); |
| } else if (Math.abs(input) < 16) { |
| input = input * 60; |
| } |
| if (!this._isUTC && keepLocalTime) { |
| localAdjust = getDateOffset(this); |
| } |
| this._offset = input; |
| this._isUTC = true; |
| if (localAdjust != null) { |
| this.add(localAdjust, 'm'); |
| } |
| if (offset !== input) { |
| if (!keepLocalTime || this._changeInProgress) { |
| add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false); |
| } else if (!this._changeInProgress) { |
| this._changeInProgress = true; |
| utils_hooks__hooks.updateOffset(this, true); |
| this._changeInProgress = null; |
| } |
| } |
| return this; |
| } else { |
| return this._isUTC ? offset : getDateOffset(this); |
| } |
| } |
| |
| function getSetZone (input, keepLocalTime) { |
| if (input != null) { |
| if (typeof input !== 'string') { |
| input = -input; |
| } |
| |
| this.utcOffset(input, keepLocalTime); |
| |
| return this; |
| } else { |
| return -this.utcOffset(); |
| } |
| } |
| |
| function setOffsetToUTC (keepLocalTime) { |
| return this.utcOffset(0, keepLocalTime); |
| } |
| |
| function setOffsetToLocal (keepLocalTime) { |
| if (this._isUTC) { |
| this.utcOffset(0, keepLocalTime); |
| this._isUTC = false; |
| |
| if (keepLocalTime) { |
| this.subtract(getDateOffset(this), 'm'); |
| } |
| } |
| return this; |
| } |
| |
| function setOffsetToParsedOffset () { |
| if (this._tzm) { |
| this.utcOffset(this._tzm); |
| } else if (typeof this._i === 'string') { |
| this.utcOffset(offsetFromString(matchOffset, this._i)); |
| } |
| return this; |
| } |
| |
| function hasAlignedHourOffset (input) { |
| if (!this.isValid()) { |
| return false; |
| } |
| input = input ? local__createLocal(input).utcOffset() : 0; |
| |
| return (this.utcOffset() - input) % 60 === 0; |
| } |
| |
| function isDaylightSavingTime () { |
| return ( |
| this.utcOffset() > this.clone().month(0).utcOffset() || |
| this.utcOffset() > this.clone().month(5).utcOffset() |
| ); |
| } |
| |
| function isDaylightSavingTimeShifted () { |
| if (!isUndefined(this._isDSTShifted)) { |
| return this._isDSTShifted; |
| } |
| |
| var c = {}; |
| |
| copyConfig(c, this); |
| c = prepareConfig(c); |
| |
| if (c._a) { |
| var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a); |
| this._isDSTShifted = this.isValid() && |
| compareArrays(c._a, other.toArray()) > 0; |
| } else { |
| this._isDSTShifted = false; |
| } |
| |
| return this._isDSTShifted; |
| } |
| |
| function isLocal () { |
| return this.isValid() ? !this._isUTC : false; |
| } |
| |
| function isUtcOffset () { |
| return this.isValid() ? this._isUTC : false; |
| } |
| |
| function isUtc () { |
| return this.isValid() ? this._isUTC && this._offset === 0 : false; |
| } |
| |
| // ASP.NET json date format regex |
| var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?\d*)?$/; |
| |
| // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html |
| // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere |
| // and further modified to allow for strings containing both week and day |
| var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/; |
| |
| function create__createDuration (input, key) { |
| var duration = input, |
| // matching against regexp is expensive, do it on demand |
| match = null, |
| sign, |
| ret, |
| diffRes; |
| |
| if (isDuration(input)) { |
| duration = { |
| ms : input._milliseconds, |
| d : input._days, |
| M : input._months |
| }; |
| } else if (typeof input === 'number') { |
| duration = {}; |
| if (key) { |
| duration[key] = input; |
| } else { |
| duration.milliseconds = input; |
| } |
| } else if (!!(match = aspNetRegex.exec(input))) { |
| sign = (match[1] === '-') ? -1 : 1; |
| duration = { |
| y : 0, |
| d : toInt(match[DATE]) * sign, |
| h : toInt(match[HOUR]) * sign, |
| m : toInt(match[MINUTE]) * sign, |
| s : toInt(match[SECOND]) * sign, |
| ms : toInt(match[MILLISECOND]) * sign |
| }; |
| } else if (!!(match = isoRegex.exec(input))) { |
| sign = (match[1] === '-') ? -1 : 1; |
| duration = { |
| y : parseIso(match[2], sign), |
| M : parseIso(match[3], sign), |
| w : parseIso(match[4], sign), |
| d : parseIso(match[5], sign), |
| h : parseIso(match[6], sign), |
| m : parseIso(match[7], sign), |
| s : parseIso(match[8], sign) |
| }; |
| } else if (duration == null) {// checks for null or undefined |
| duration = {}; |
| } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { |
| diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to)); |
| |
| duration = {}; |
| duration.ms = diffRes.milliseconds; |
| duration.M = diffRes.months; |
| } |
| |
| ret = new Duration(duration); |
| |
| if (isDuration(input) && hasOwnProp(input, '_locale')) { |
| ret._locale = input._locale; |
| } |
| |
| return ret; |
| } |
| |
| create__createDuration.fn = Duration.prototype; |
| |
| function parseIso (inp, sign) { |
| // We'd normally use ~~inp for this, but unfortunately it also |
| // converts floats to ints. |
| // inp may be undefined, so careful calling replace on it. |
| var res = inp && parseFloat(inp.replace(',', '.')); |
| // apply sign while we're at it |
| return (isNaN(res) ? 0 : res) * sign; |
| } |
| |
| function positiveMomentsDifference(base, other) { |
| var res = {milliseconds: 0, months: 0}; |
| |
| res.months = other.month() - base.month() + |
| (other.year() - base.year()) * 12; |
| if (base.clone().add(res.months, 'M').isAfter(other)) { |
| --res.months; |
| } |
| |
| res.milliseconds = +other - +(base.clone().add(res.months, 'M')); |
| |
| return res; |
| } |
| |
| function momentsDifference(base, other) { |
| var res; |
| if (!(base.isValid() && other.isValid())) { |
| return {milliseconds: 0, months: 0}; |
| } |
| |
| other = cloneWithOffset(other, base); |
| if (base.isBefore(other)) { |
| res = positiveMomentsDifference(base, other); |
| } else { |
| res = positiveMomentsDifference(other, base); |
| res.milliseconds = -res.milliseconds; |
| res.months = -res.months; |
| } |
| |
| return res; |
| } |
| |
| function absRound (number) { |
| if (number < 0) { |
| return Math.round(-1 * number) * -1; |
| } else { |
| return Math.round(number); |
| } |
| } |
| |
| // TODO: remove 'name' arg after deprecation is removed |
| function createAdder(direction, name) { |
| return function (val, period) { |
| var dur, tmp; |
| //invert the arguments, but complain about it |
| if (period !== null && !isNaN(+period)) { |
| deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + |
| 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'); |
| tmp = val; val = period; period = tmp; |
| } |
| |
| val = typeof val === 'string' ? +val : val; |
| dur = create__createDuration(val, period); |
| add_subtract__addSubtract(this, dur, direction); |
| return this; |
| }; |
| } |
| |
| function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) { |
| var milliseconds = duration._milliseconds, |
| days = absRound(duration._days), |
| months = absRound(duration._months); |
| |
| if (!mom.isValid()) { |
| // No op |
| return; |
| } |
| |
| updateOffset = updateOffset == null ? true : updateOffset; |
| |
| if (milliseconds) { |
| mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); |
| } |
| if (days) { |
| get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding); |
| } |
| if (months) { |
| setMonth(mom, get_set__get(mom, 'Month') + months * isAdding); |
| } |
| if (updateOffset) { |
| utils_hooks__hooks.updateOffset(mom, days || months); |
| } |
| } |
| |
| var add_subtract__add = createAdder(1, 'add'); |
| var add_subtract__subtract = createAdder(-1, 'subtract'); |
| |
| function getCalendarFormat(myMoment, now) { |
| var diff = myMoment.diff(now, 'days', true); |
| return diff < -6 ? 'sameElse' : |
| diff < -1 ? 'lastWeek' : |
| diff < 0 ? 'lastDay' : |
| diff < 1 ? 'sameDay' : |
| diff < 2 ? 'nextDay' : |
| diff < 7 ? 'nextWeek' : 'sameElse'; |
| } |
| |
| function moment_calendar__calendar (time, formats) { |
| // We want to compare the start of today, vs this. |
| // Getting start-of-today depends on whether we're local/utc/offset or not. |
| var now = time || local__createLocal(), |
| sod = cloneWithOffset(now, this).startOf('day'), |
| format = utils_hooks__hooks.calendarFormat(this, sod) || 'sameElse'; |
| |
| var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]); |
| |
| return this.format(output || this.localeData().calendar(format, this, local__createLocal(now))); |
| } |
| |
| function clone () { |
| return new Moment(this); |
| } |
| |
| function isAfter (input, units) { |
| var localInput = isMoment(input) ? input : local__createLocal(input); |
| if (!(this.isValid() && localInput.isValid())) { |
| return false; |
| } |
| units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); |
| if (units === 'millisecond') { |
| return this.valueOf() > localInput.valueOf(); |
| } else { |
| return localInput.valueOf() < this.clone().startOf(units).valueOf(); |
| } |
| } |
| |
| function isBefore (input, units) { |
| var localInput = isMoment(input) ? input : local__createLocal(input); |
| if (!(this.isValid() && localInput.isValid())) { |
| return false; |
| } |
| units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); |
| if (units === 'millisecond') { |
| return this.valueOf() < localInput.valueOf(); |
| } else { |
| return this.clone().endOf(units).valueOf() < localInput.valueOf(); |
| } |
| } |
| |
| function isBetween (from, to, units, inclusivity) { |
| inclusivity = inclusivity || '()'; |
| return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) && |
| (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units)); |
| } |
| |
| function isSame (input, units) { |
| var localInput = isMoment(input) ? input : local__createLocal(input), |
| inputMs; |
| if (!(this.isValid() && localInput.isValid())) { |
| return false; |
| } |
| units = normalizeUnits(units || 'millisecond'); |
| if (units === 'millisecond') { |
| return this.valueOf() === localInput.valueOf(); |
| } else { |
| inputMs = localInput.valueOf(); |
| return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf(); |
| } |
| } |
| |
| function isSameOrAfter (input, units) { |
| return this.isSame(input, units) || this.isAfter(input,units); |
| } |
| |
| function isSameOrBefore (input, units) { |
| return this.isSame(input, units) || this.isBefore(input,units); |
| } |
| |
| function diff (input, units, asFloat) { |
| var that, |
| zoneDelta, |
| delta, output; |
| |
| if (!this.isValid()) { |
| return NaN; |
| } |
| |
| that = cloneWithOffset(input, this); |
| |
| if (!that.isValid()) { |
| return NaN; |
| } |
| |
| zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; |
| |
| units = normalizeUnits(units); |
| |
| if (units === 'year' || units === 'month' || units === 'quarter') { |
| output = monthDiff(this, that); |
| if (units === 'quarter') { |
| output = output / 3; |
| } else if (units === 'year') { |
| output = output / 12; |
| } |
| } else { |
| delta = this - that; |
| output = units === 'second' ? delta / 1e3 : // 1000 |
| units === 'minute' ? delta / 6e4 : // 1000 * 60 |
| units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 |
| units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst |
| units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst |
| delta; |
| } |
| return asFloat ? output : absFloor(output); |
| } |
| |
| function monthDiff (a, b) { |
| // difference in months |
| var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), |
| // b is in (anchor - 1 month, anchor + 1 month) |
| anchor = a.clone().add(wholeMonthDiff, 'months'), |
| anchor2, adjust; |
| |
| if (b - anchor < 0) { |
| anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); |
| // linear across the month |
| adjust = (b - anchor) / (anchor - anchor2); |
| } else { |
| anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); |
| // linear across the month |
| adjust = (b - anchor) / (anchor2 - anchor); |
| } |
| |
| //check for negative zero, return zero if negative zero |
| return -(wholeMonthDiff + adjust) || 0; |
| } |
| |
| utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; |
| utils_hooks__hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; |
| |
| function toString () { |
| return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); |
| } |
| |
| function moment_format__toISOString () { |
| var m = this.clone().utc(); |
| if (0 < m.year() && m.year() <= 9999) { |
| if (isFunction(Date.prototype.toISOString)) { |
| // native implementation is ~50x faster, use it when we can |
| return this.toDate().toISOString(); |
| } else { |
| return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); |
| } |
| } else { |
| return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); |
| } |
| } |
| |
| function format (inputString) { |
| if (!inputString) { |
| inputString = this.isUtc() ? utils_hooks__hooks.defaultFormatUtc : utils_hooks__hooks.defaultFormat; |
| } |
| var output = formatMoment(this, inputString); |
| return this.localeData().postformat(output); |
| } |
| |
| function from (time, withoutSuffix) { |
| if (this.isValid() && |
| ((isMoment(time) && time.isValid()) || |
| local__createLocal(time).isValid())) { |
| return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); |
| } else { |
| return this.localeData().invalidDate(); |
| } |
| } |
| |
| function fromNow (withoutSuffix) { |
| return this.from(local__createLocal(), withoutSuffix); |
| } |
| |
| function to (time, withoutSuffix) { |
| if (this.isValid() && |
| ((isMoment(time) && time.isValid()) || |
| local__createLocal(time).isValid())) { |
| return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); |
| } else { |
| return this.localeData().invalidDate(); |
| } |
| } |
| |
| function toNow (withoutSuffix) { |
| return this.to(local__createLocal(), withoutSuffix); |
| } |
| |
| // If passed a locale key, it will set the locale for this |
| // instance. Otherwise, it will return the locale configuration |
| // variables for this instance. |
| function locale (key) { |
| var newLocaleData; |
| |
| if (key === undefined) { |
| return this._locale._abbr; |
| } else { |
| newLocaleData = locale_locales__getLocale(key); |
| if (newLocaleData != null) { |
| this._locale = newLocaleData; |
| } |
| return this; |
| } |
| } |
| |
| var lang = deprecate( |
| 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', |
| function (key) { |
| if (key === undefined) { |
| return this.localeData(); |
| } else { |
| return this.locale(key); |
| } |
| } |
| ); |
| |
| function localeData () { |
| return this._locale; |
| } |
| |
| function startOf (units) { |
| units = normalizeUnits(units); |
| // the following switch intentionally omits break keywords |
| // to utilize falling through the cases. |
| switch (units) { |
| case 'year': |
| this.month(0); |
| /* falls through */ |
| case 'quarter': |
| case 'month': |
| this.date(1); |
| /* falls through */ |
| case 'week': |
| case 'isoWeek': |
| case 'day': |
| case 'date': |
| this.hours(0); |
| /* falls through */ |
| case 'hour': |
| this.minutes(0); |
| /* falls through */ |
| case 'minute': |
| this.seconds(0); |
| /* falls through */ |
| case 'second': |
| this.milliseconds(0); |
| } |
| |
| // weeks are a special case |
| if (units === 'week') { |
| this.weekday(0); |
| } |
| if (units === 'isoWeek') { |
| this.isoWeekday(1); |
| } |
| |
| // quarters are also special |
| if (units === 'quarter') { |
| this.month(Math.floor(this.month() / 3) * 3); |
| } |
| |
| return this; |
| } |
| |
| function endOf (units) { |
| units = normalizeUnits(units); |
| if (units === undefined || units === 'millisecond') { |
| return this; |
| } |
| |
| // 'date' is an alias for 'day', so it should be considered as such. |
| if (units === 'date') { |
| units = 'day'; |
| } |
| |
| return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); |
| } |
| |
| function to_type__valueOf () { |
| return this._d.valueOf() - ((this._offset || 0) * 60000); |
| } |
| |
| function unix () { |
| return Math.floor(this.valueOf() / 1000); |
| } |
| |
| function toDate () { |
| return new Date(this.valueOf()); |
| } |
| |
| function toArray () { |
| var m = this; |
| return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; |
| } |
| |
| function toObject () { |
| var m = this; |
| return { |
| years: m.year(), |
| months: m.month(), |
| date: m.date(), |
| hours: m.hours(), |
| minutes: m.minutes(), |
| seconds: m.seconds(), |
| milliseconds: m.milliseconds() |
| }; |
| } |
| |
| function toJSON () { |
| // new Date(NaN).toJSON() === null |
| return this.isValid() ? this.toISOString() : null; |
| } |
| |
| function moment_valid__isValid () { |
| return valid__isValid(this); |
| } |
| |
| function parsingFlags () { |
| return extend({}, getParsingFlags(this)); |
| } |
| |
| function invalidAt () { |
| return getParsingFlags(this).overflow; |
| } |
| |
| function creationData() { |
| return { |
| input: this._i, |
| format: this._f, |
| locale: this._locale, |
| isUTC: this._isUTC, |
| strict: this._strict |
| }; |
| } |
| |
| // FORMATTING |
| |
| addFormatToken(0, ['gg', 2], 0, function () { |
| return this.weekYear() % 100; |
| }); |
| |
| addFormatToken(0, ['GG', 2], 0, function () { |
| return this.isoWeekYear() % 100; |
| }); |
| |
| function addWeekYearFormatToken (token, getter) { |
| addFormatToken(0, [token, token.length], 0, getter); |
| } |
| |
| addWeekYearFormatToken('gggg', 'weekYear'); |
| addWeekYearFormatToken('ggggg', 'weekYear'); |
| addWeekYearFormatToken('GGGG', 'isoWeekYear'); |
| addWeekYearFormatToken('GGGGG', 'isoWeekYear'); |
| |
| // ALIASES |
| |
| addUnitAlias('weekYear', 'gg'); |
| addUnitAlias('isoWeekYear', 'GG'); |
| |
| // PRIORITY |
| |
| addUnitPriority('weekYear', 1); |
| addUnitPriority('isoWeekYear', 1); |
| |
| |
| // PARSING |
| |
| addRegexToken('G', matchSigned); |
| addRegexToken('g', matchSigned); |
| addRegexToken('GG', match1to2, match2); |
| addRegexToken('gg', match1to2, match2); |
| addRegexToken('GGGG', match1to4, match4); |
| addRegexToken('gggg', match1to4, match4); |
| addRegexToken('GGGGG', match1to6, match6); |
| addRegexToken('ggggg', match1to6, match6); |
| |
| addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { |
| week[token.substr(0, 2)] = toInt(input); |
| }); |
| |
| addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { |
| week[token] = utils_hooks__hooks.parseTwoDigitYear(input); |
| }); |
| |
| // MOMENTS |
| |
| function getSetWeekYear (input) { |
| return getSetWeekYearHelper.call(this, |
| input, |
| this.week(), |
| this.weekday(), |
| this.localeData()._week.dow, |
| this.localeData()._week.doy); |
| } |
| |
| function getSetISOWeekYear (input) { |
| return getSetWeekYearHelper.call(this, |
| input, this.isoWeek(), this.isoWeekday(), 1, 4); |
| } |
| |
| function getISOWeeksInYear () { |
| return weeksInYear(this.year(), 1, 4); |
| } |
| |
| function getWeeksInYear () { |
| var weekInfo = this.localeData()._week; |
| return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); |
| } |
| |
| function getSetWeekYearHelper(input, week, weekday, dow, doy) { |
| var weeksTarget; |
| if (input == null) { |
| return weekOfYear(this, dow, doy).year; |
| } else { |
| weeksTarget = weeksInYear(input, dow, doy); |
| if (week > weeksTarget) { |
| week = weeksTarget; |
| } |
| return setWeekAll.call(this, input, week, weekday, dow, doy); |
| } |
| } |
| |
| function setWeekAll(weekYear, week, weekday, dow, doy) { |
| var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), |
| date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); |
| |
| this.year(date.getUTCFullYear()); |
| this.month(date.getUTCMonth()); |
| this.date(date.getUTCDate()); |
| return this; |
| } |
| |
| // FORMATTING |
| |
| addFormatToken('Q', 0, 'Qo', 'quarter'); |
| |
| // ALIASES |
| |
| addUnitAlias('quarter', 'Q'); |
| |
| // PRIORITY |
| |
| addUnitPriority('quarter', 7); |
| |
| // PARSING |
| |
| addRegexToken('Q', match1); |
| addParseToken('Q', function (input, array) { |
| array[MONTH] = (toInt(input) - 1) * 3; |
| }); |
| |
| // MOMENTS |
| |
| function getSetQuarter (input) { |
| return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); |
| } |
| |
| // FORMATTING |
| |
| addFormatToken('D', ['DD', 2], 'Do', 'date'); |
| |
| // ALIASES |
| |
| addUnitAlias('date', 'D'); |
| |
| // PRIOROITY |
| addUnitPriority('date', 9); |
| |
| // PARSING |
| |
| addRegexToken('D', match1to2); |
| addRegexToken('DD', match1to2, match2); |
| addRegexToken('Do', function (isStrict, locale) { |
| return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; |
| }); |
| |
| addParseToken(['D', 'DD'], DATE); |
| addParseToken('Do', function (input, array) { |
| array[DATE] = toInt(input.match(match1to2)[0], 10); |
| }); |
| |
| // MOMENTS |
| |
| var getSetDayOfMonth = makeGetSet('Date', true); |
| |
| // FORMATTING |
| |
| addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); |
| |
| // ALIASES |
| |
| addUnitAlias('dayOfYear', 'DDD'); |
| |
| // PRIORITY |
| addUnitPriority('dayOfYear', 4); |
| |
| // PARSING |
| |
| addRegexToken('DDD', match1to3); |
| addRegexToken('DDDD', match3); |
| addParseToken(['DDD', 'DDDD'], function (input, array, config) { |
| config._dayOfYear = toInt(input); |
| }); |
| |
| // HELPERS |
| |
| // MOMENTS |
| |
| function getSetDayOfYear (input) { |
| var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; |
| return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); |
| } |
| |
| // FORMATTING |
| |
| addFormatToken('m', ['mm', 2], 0, 'minute'); |
| |
| // ALIASES |
| |
| addUnitAlias('minute', 'm'); |
| |
| // PRIORITY |
| |
| addUnitPriority('minute', 14); |
| |
| // PARSING |
| |
| addRegexToken('m', match1to2); |
| addRegexToken('mm', match1to2, match2); |
| addParseToken(['m', 'mm'], MINUTE); |
| |
| // MOMENTS |
| |
| var getSetMinute = makeGetSet('Minutes', false); |
| |
| // FORMATTING |
| |
| addFormatToken('s', ['ss', 2], 0, 'second'); |
| |
| // ALIASES |
| |
| addUnitAlias('second', 's'); |
| |
| // PRIORITY |
| |
| addUnitPriority('second', 15); |
| |
| // PARSING |
| |
| addRegexToken('s', match1to2); |
| addRegexToken('ss', match1to2, match2); |
| addParseToken(['s', 'ss'], SECOND); |
| |
| // MOMENTS |
| |
| var getSetSecond = makeGetSet('Seconds', false); |
| |
| // FORMATTING |
| |
| addFormatToken('S', 0, 0, function () { |
| return ~~(this.millisecond() / 100); |
| }); |
| |
| addFormatToken(0, ['SS', 2], 0, function () { |
| return ~~(this.millisecond() / 10); |
| }); |
| |
| addFormatToken(0, ['SSS', 3], 0, 'millisecond'); |
| addFormatToken(0, ['SSSS', 4], 0, function () { |
| return this.millisecond() * 10; |
| }); |
| addFormatToken(0, ['SSSSS', 5], 0, function () { |
| return this.millisecond() * 100; |
| }); |
| addFormatToken(0, ['SSSSSS', 6], 0, function () { |
| return this.millisecond() * 1000; |
| }); |
| addFormatToken(0, ['SSSSSSS', 7], 0, function () { |
| return this.millisecond() * 10000; |
| }); |
| addFormatToken(0, ['SSSSSSSS', 8], 0, function () { |
| return this.millisecond() * 100000; |
| }); |
| addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { |
| return this.millisecond() * 1000000; |
| }); |
| |
| |
| // ALIASES |
| |
| addUnitAlias('millisecond', 'ms'); |
| |
| // PRIORITY |
| |
| addUnitPriority('millisecond', 16); |
| |
| // PARSING |
| |
| addRegexToken('S', match1to3, match1); |
| addRegexToken('SS', match1to3, match2); |
| addRegexToken('SSS', match1to3, match3); |
| |
| var token; |
| for (token = 'SSSS'; token.length <= 9; token += 'S') { |
| addRegexToken(token, matchUnsigned); |
| } |
| |
| function parseMs(input, array) { |
| array[MILLISECOND] = toInt(('0.' + input) * 1000); |
| } |
| |
| for (token = 'S'; token.length <= 9; token += 'S') { |
| addParseToken(token, parseMs); |
| } |
| // MOMENTS |
| |
| var getSetMillisecond = makeGetSet('Milliseconds', false); |
| |
| // FORMATTING |
| |
| addFormatToken('z', 0, 0, 'zoneAbbr'); |
| addFormatToken('zz', 0, 0, 'zoneName'); |
| |
| // MOMENTS |
| |
| function getZoneAbbr () { |
| return this._isUTC ? 'UTC' : ''; |
| } |
| |
| function getZoneName () { |
| return this._isUTC ? 'Coordinated Universal Time' : ''; |
| } |
| |
| var momentPrototype__proto = Moment.prototype; |
| |
| momentPrototype__proto.add = add_subtract__add; |
| momentPrototype__proto.calendar = moment_calendar__calendar; |
| momentPrototype__proto.clone = clone; |
| momentPrototype__proto.diff = diff; |
| momentPrototype__proto.endOf = endOf; |
| momentPrototype__proto.format = format; |
| momentPrototype__proto.from = from; |
| momentPrototype__proto.fromNow = fromNow; |
| momentPrototype__proto.to = to; |
| momentPrototype__proto.toNow = toNow; |
| momentPrototype__proto.get = stringGet; |
| momentPrototype__proto.invalidAt = invalidAt; |
| momentPrototype__proto.isAfter = isAfter; |
| momentPrototype__proto.isBefore = isBefore; |
| momentPrototype__proto.isBetween = isBetween; |
| momentPrototype__proto.isSame = isSame; |
| momentPrototype__proto.isSameOrAfter = isSameOrAfter; |
| momentPrototype__proto.isSameOrBefore = isSameOrBefore; |
| momentPrototype__proto.isValid = moment_valid__isValid; |
| momentPrototype__proto.lang = lang; |
| momentPrototype__proto.locale = locale; |
| momentPrototype__proto.localeData = localeData; |
| momentPrototype__proto.max = prototypeMax; |
| momentPrototype__proto.min = prototypeMin; |
| momentPrototype__proto.parsingFlags = parsingFlags; |
| momentPrototype__proto.set = stringSet; |
| momentPrototype__proto.startOf = startOf; |
| momentPrototype__proto.subtract = add_subtract__subtract; |
| momentPrototype__proto.toArray = toArray; |
| momentPrototype__proto.toObject = toObject; |
| momentPrototype__proto.toDate = toDate; |
| momentPrototype__proto.toISOString = moment_format__toISOString; |
| momentPrototype__proto.toJSON = toJSON; |
| momentPrototype__proto.toString = toString; |
| momentPrototype__proto.unix = unix; |
| momentPrototype__proto.valueOf = to_type__valueOf; |
| momentPrototype__proto.creationData = creationData; |
| |
| // Year |
| momentPrototype__proto.year = getSetYear; |
| momentPrototype__proto.isLeapYear = getIsLeapYear; |
| |
| // Week Year |
| momentPrototype__proto.weekYear = getSetWeekYear; |
| momentPrototype__proto.isoWeekYear = getSetISOWeekYear; |
| |
| // Quarter |
| momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter; |
| |
| // Month |
| momentPrototype__proto.month = getSetMonth; |
| momentPrototype__proto.daysInMonth = getDaysInMonth; |
| |
| // Week |
| momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek; |
| momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek; |
| momentPrototype__proto.weeksInYear = getWeeksInYear; |
| momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear; |
| |
| // Day |
| momentPrototype__proto.date = getSetDayOfMonth; |
| momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek; |
| momentPrototype__proto.weekday = getSetLocaleDayOfWeek; |
| momentPrototype__proto.isoWeekday = getSetISODayOfWeek; |
| momentPrototype__proto.dayOfYear = getSetDayOfYear; |
| |
| // Hour |
| momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour; |
| |
| // Minute |
| momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute; |
| |
| // Second |
| momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond; |
| |
| // Millisecond |
| momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond; |
| |
| // Offset |
| momentPrototype__proto.utcOffset = getSetOffset; |
| momentPrototype__proto.utc = setOffsetToUTC; |
| momentPrototype__proto.local = setOffsetToLocal; |
| momentPrototype__proto.parseZone = setOffsetToParsedOffset; |
| momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset; |
| momentPrototype__proto.isDST = isDaylightSavingTime; |
| momentPrototype__proto.isLocal = isLocal; |
| momentPrototype__proto.isUtcOffset = isUtcOffset; |
| momentPrototype__proto.isUtc = isUtc; |
| momentPrototype__proto.isUTC = isUtc; |
| |
| // Timezone |
| momentPrototype__proto.zoneAbbr = getZoneAbbr; |
| momentPrototype__proto.zoneName = getZoneName; |
| |
| // Deprecations |
| momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); |
| momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); |
| momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); |
| momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone); |
| momentPrototype__proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted); |
| |
| var momentPrototype = momentPrototype__proto; |
| |
| function moment__createUnix (input) { |
| return local__createLocal(input * 1000); |
| } |
| |
| function moment__createInZone () { |
| return local__createLocal.apply(null, arguments).parseZone(); |
| } |
| |
| function preParsePostFormat (string) { |
| return string; |
| } |
| |
| var prototype__proto = Locale.prototype; |
| |
| prototype__proto.calendar = locale_calendar__calendar; |
| prototype__proto.longDateFormat = longDateFormat; |
| prototype__proto.invalidDate = invalidDate; |
| prototype__proto.ordinal = ordinal; |
| prototype__proto.preparse = preParsePostFormat; |
| prototype__proto.postformat = preParsePostFormat; |
| prototype__proto.relativeTime = relative__relativeTime; |
| prototype__proto.pastFuture = pastFuture; |
| prototype__proto.set = locale_set__set; |
| |
| // Month |
| prototype__proto.months = localeMonths; |
| prototype__proto.monthsShort = localeMonthsShort; |
| prototype__proto.monthsParse = localeMonthsParse; |
| prototype__proto.monthsRegex = monthsRegex; |
| prototype__proto.monthsShortRegex = monthsShortRegex; |
| |
| // Week |
| prototype__proto.week = localeWeek; |
| prototype__proto.firstDayOfYear = localeFirstDayOfYear; |
| prototype__proto.firstDayOfWeek = localeFirstDayOfWeek; |
| |
| // Day of Week |
| prototype__proto.weekdays = localeWeekdays; |
| prototype__proto.weekdaysMin = localeWeekdaysMin; |
| prototype__proto.weekdaysShort = localeWeekdaysShort; |
| prototype__proto.weekdaysParse = localeWeekdaysParse; |
| |
| prototype__proto.weekdaysRegex = weekdaysRegex; |
| prototype__proto.weekdaysShortRegex = weekdaysShortRegex; |
| prototype__proto.weekdaysMinRegex = weekdaysMinRegex; |
| |
| // Hours |
| prototype__proto.isPM = localeIsPM; |
| prototype__proto.meridiem = localeMeridiem; |
| |
| function lists__get (format, index, field, setter) { |
| var locale = locale_locales__getLocale(); |
| var utc = create_utc__createUTC().set(setter, index); |
| return locale[field](utc, format); |
| } |
| |
| function listMonthsImpl (format, index, field) { |
| if (typeof format === 'number') { |
| index = format; |
| format = undefined; |
| } |
| |
| format = format || ''; |
| |
| if (index != null) { |
| return lists__get(format, index, field, 'month'); |
| } |
| |
| var i; |
| var out = []; |
| for (i = 0; i < 12; i++) { |
| out[i] = lists__get(format, i, field, 'month'); |
| } |
| return out; |
| } |
| |
| // () |
| // (5) |
| // (fmt, 5) |
| // (fmt) |
| // (true) |
| // (true, 5) |
| // (true, fmt, 5) |
| // (true, fmt) |
| function listWeekdaysImpl (localeSorted, format, index, field) { |
| if (typeof localeSorted === 'boolean') { |
| if (typeof format === 'number') { |
| index = format; |
| format = undefined; |
| } |
| |
| format = format || ''; |
| } else { |
| format = localeSorted; |
| index = format; |
| localeSorted = false; |
| |
| if (typeof format === 'number') { |
| index = format; |
| format = undefined; |
| } |
| |
| format = format || ''; |
| } |
| |
| var locale = locale_locales__getLocale(), |
| shift = localeSorted ? locale._week.dow : 0; |
| |
| if (index != null) { |
| return lists__get(format, (index + shift) % 7, field, 'day'); |
| } |
| |
| var i; |
| var out = []; |
| for (i = 0; i < 7; i++) { |
| out[i] = lists__get(format, (i + shift) % 7, field, 'day'); |
| } |
| return out; |
| } |
| |
| function lists__listMonths (format, index) { |
| return listMonthsImpl(format, index, 'months'); |
| } |
| |
| function lists__listMonthsShort (format, index) { |
| return listMonthsImpl(format, index, 'monthsShort'); |
| } |
| |
| function lists__listWeekdays (localeSorted, format, index) { |
| return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); |
| } |
| |
| function lists__listWeekdaysShort (localeSorted, format, index) { |
| return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); |
| } |
| |
| function lists__listWeekdaysMin (localeSorted, format, index) { |
| return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); |
| } |
| |
| locale_locales__getSetGlobalLocale('en', { |
| ordinalParse: /\d{1,2}(th|st|nd|rd)/, |
| ordinal : function (number) { |
| var b = number % 10, |
| output = (toInt(number % 100 / 10) === 1) ? 'th' : |
| (b === 1) ? 'st' : |
| (b === 2) ? 'nd' : |
| (b === 3) ? 'rd' : 'th'; |
| return number + output; |
| } |
| }); |
| |
| // Side effect imports |
| utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale); |
| utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale); |
| |
| var mathAbs = Math.abs; |
| |
| function duration_abs__abs () { |
| var data = this._data; |
| |
| this._milliseconds = mathAbs(this._milliseconds); |
| this._days = mathAbs(this._days); |
| this._months = mathAbs(this._months); |
| |
| data.milliseconds = mathAbs(data.milliseconds); |
| data.seconds = mathAbs(data.seconds); |
| data.minutes = mathAbs(data.minutes); |
| data.hours = mathAbs(data.hours); |
| data.months = mathAbs(data.months); |
| data.years = mathAbs(data.years); |
| |
| return this; |
| } |
| |
| function duration_add_subtract__addSubtract (duration, input, value, direction) { |
| var other = create__createDuration(input, value); |
| |
| duration._milliseconds += direction * other._milliseconds; |
| duration._days += direction * other._days; |
| duration._months += direction * other._months; |
| |
| return duration._bubble(); |
| } |
| |
| // supports only 2.0-style add(1, 's') or add(duration) |
| function duration_add_subtract__add (input, value) { |
| return duration_add_subtract__addSubtract(this, input, value, 1); |
| } |
| |
| // supports only 2.0-style subtract(1, 's') or subtract(duration) |
| function duration_add_subtract__subtract (input, value) { |
| return duration_add_subtract__addSubtract(this, input, value, -1); |
| } |
| |
| function absCeil (number) { |
| if (number < 0) { |
| return Math.floor(number); |
| } else { |
| return Math.ceil(number); |
| } |
| } |
| |
| function bubble () { |
| var milliseconds = this._milliseconds; |
| var days = this._days; |
| var months = this._months; |
| var data = this._data; |
| var seconds, minutes, hours, years, monthsFromDays; |
| |
| // if we have a mix of positive and negative values, bubble down first |
| // check: https://github.com/moment/moment/issues/2166 |
| if (!((milliseconds >= 0 && days >= 0 && months >= 0) || |
| (milliseconds <= 0 && days <= 0 && months <= 0))) { |
| milliseconds += absCeil(monthsToDays(months) + days) * 864e5; |
| days = 0; |
| months = 0; |
| } |
| |
| // The following code bubbles up values, see the tests for |
| // examples of what that means. |
| data.milliseconds = milliseconds % 1000; |
| |
| seconds = absFloor(milliseconds / 1000); |
| data.seconds = seconds % 60; |
| |
| minutes = absFloor(seconds / 60); |
| data.minutes = minutes % 60; |
| |
| hours = absFloor(minutes / 60); |
| data.hours = hours % 24; |
| |
| days += absFloor(hours / 24); |
| |
| // convert days to months |
| monthsFromDays = absFloor(daysToMonths(days)); |
| months += monthsFromDays; |
| days -= absCeil(monthsToDays(monthsFromDays)); |
| |
| // 12 months -> 1 year |
| years = absFloor(months / 12); |
| months %= 12; |
| |
| data.days = days; |
| data.months = months; |
| data.years = years; |
| |
| return this; |
| } |
| |
| function daysToMonths (days) { |
| // 400 years have 146097 days (taking into account leap year rules) |
| // 400 years have 12 months === 4800 |
| return days * 4800 / 146097; |
| } |
| |
| function monthsToDays (months) { |
| // the reverse of daysToMonths |
| return months * 146097 / 4800; |
| } |
| |
| function as (units) { |
| var days; |
| var months; |
| var milliseconds = this._milliseconds; |
| |
| units = normalizeUnits(units); |
| |
| if (units === 'month' || units === 'year') { |
| days = this._days + milliseconds / 864e5; |
| months = this._months + daysToMonths(days); |
| return units === 'month' ? months : months / 12; |
| } else { |
| // handle milliseconds separately because of floating point math errors (issue #1867) |
| days = this._days + Math.round(monthsToDays(this._months)); |
| switch (units) { |
| case 'week' : return days / 7 + milliseconds / 6048e5; |
| case 'day' : return days + milliseconds / 864e5; |
| case 'hour' : return days * 24 + milliseconds / 36e5; |
| case 'minute' : return days * 1440 + milliseconds / 6e4; |
| case 'second' : return days * 86400 + milliseconds / 1000; |
| // Math.floor prevents floating point math errors here |
| case 'millisecond': return Math.floor(days * 864e5) + milliseconds; |
| default: throw new Error('Unknown unit ' + units); |
| } |
| } |
| } |
| |
| // TODO: Use this.as('ms')? |
| function duration_as__valueOf () { |
| return ( |
| this._milliseconds + |
| this._days * 864e5 + |
| (this._months % 12) * 2592e6 + |
| toInt(this._months / 12) * 31536e6 |
| ); |
| } |
| |
| function makeAs (alias) { |
| return function () { |
| return this.as(alias); |
| }; |
| } |
| |
| var asMilliseconds = makeAs('ms'); |
| var asSeconds = makeAs('s'); |
| var asMinutes = makeAs('m'); |
| var asHours = makeAs('h'); |
| var asDays = makeAs('d'); |
| var asWeeks = makeAs('w'); |
| var asMonths = makeAs('M'); |
| var asYears = makeAs('y'); |
| |
| function duration_get__get (units) { |
| units = normalizeUnits(units); |
| return this[units + 's'](); |
| } |
| |
| function makeGetter(name) { |
| return function () { |
| return this._data[name]; |
| }; |
| } |
| |
| var milliseconds = makeGetter('milliseconds'); |
| var seconds = makeGetter('seconds'); |
| var minutes = makeGetter('minutes'); |
| var hours = makeGetter('hours'); |
| var days = makeGetter('days'); |
| var months = makeGetter('months'); |
| var years = makeGetter('years'); |
| |
| function weeks () { |
| return absFloor(this.days() / 7); |
| } |
| |
| var round = Math.round; |
| var thresholds = { |
| s: 45, // seconds to minute |
| m: 45, // minutes to hour |
| h: 22, // hours to day |
| d: 26, // days to month |
| M: 11 // months to year |
| }; |
| |
| // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize |
| function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { |
| return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); |
| } |
| |
| function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) { |
| var duration = create__createDuration(posNegDuration).abs(); |
| var seconds = round(duration.as('s')); |
| var minutes = round(duration.as('m')); |
| var hours = round(duration.as('h')); |
| var days = round(duration.as('d')); |
| var months = round(duration.as('M')); |
| var years = round(duration.as('y')); |
| |
| var a = seconds < thresholds.s && ['s', seconds] || |
| minutes <= 1 && ['m'] || |
| minutes < thresholds.m && ['mm', minutes] || |
| hours <= 1 && ['h'] || |
| hours < thresholds.h && ['hh', hours] || |
| days <= 1 && ['d'] || |
| days < thresholds.d && ['dd', days] || |
| months <= 1 && ['M'] || |
| months < thresholds.M && ['MM', months] || |
| years <= 1 && ['y'] || ['yy', years]; |
| |
| a[2] = withoutSuffix; |
| a[3] = +posNegDuration > 0; |
| a[4] = locale; |
| return substituteTimeAgo.apply(null, a); |
| } |
| |
| // This function allows you to set the rounding function for relative time strings |
| function duration_humanize__getSetRelativeTimeRounding (roundingFunction) { |
| if (roundingFunction === undefined) { |
| return round; |
| } |
| if (typeof(roundingFunction) === 'function') { |
| round = roundingFunction; |
| return true; |
| } |
| return false; |
| } |
| |
| // This function allows you to set a threshold for relative time strings |
| function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) { |
| if (thresholds[threshold] === undefined) { |
| return false; |
| } |
| if (limit === undefined) { |
| return thresholds[threshold]; |
| } |
| thresholds[threshold] = limit; |
| return true; |
| } |
| |
| function humanize (withSuffix) { |
| var locale = this.localeData(); |
| var output = duration_humanize__relativeTime(this, !withSuffix, locale); |
| |
| if (withSuffix) { |
| output = locale.pastFuture(+this, output); |
| } |
| |
| return locale.postformat(output); |
| } |
| |
| var iso_string__abs = Math.abs; |
| |
| function iso_string__toISOString() { |
| // for ISO strings we do not use the normal bubbling rules: |
| // * milliseconds bubble up until they become hours |
| // * days do not bubble at all |
| // * months bubble up until they become years |
| // This is because there is no context-free conversion between hours and days |
| // (think of clock changes) |
| // and also not between days and months (28-31 days per month) |
| var seconds = iso_string__abs(this._milliseconds) / 1000; |
| var days = iso_string__abs(this._days); |
| var months = iso_string__abs(this._months); |
| var minutes, hours, years; |
| |
| // 3600 seconds -> 60 minutes -> 1 hour |
| minutes = absFloor(seconds / 60); |
| hours = absFloor(minutes / 60); |
| seconds %= 60; |
| minutes %= 60; |
| |
| // 12 months -> 1 year |
| years = absFloor(months / 12); |
| months %= 12; |
| |
| |
| // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js |
| var Y = years; |
| var M = months; |
| var D = days; |
| var h = hours; |
| var m = minutes; |
| var s = seconds; |
| var total = this.asSeconds(); |
| |
| if (!total) { |
| // this is the same as C#'s (Noda) and python (isodate)... |
| // but not other JS (goog.date) |
| return 'P0D'; |
| } |
| |
| return (total < 0 ? '-' : '') + |
| 'P' + |
| (Y ? Y + 'Y' : '') + |
| (M ? M + 'M' : '') + |
| (D ? D + 'D' : '') + |
| ((h || m || s) ? 'T' : '') + |
| (h ? h + 'H' : '') + |
| (m ? m + 'M' : '') + |
| (s ? s + 'S' : ''); |
| } |
| |
| var duration_prototype__proto = Duration.prototype; |
| |
| duration_prototype__proto.abs = duration_abs__abs; |
| duration_prototype__proto.add = duration_add_subtract__add; |
| duration_prototype__proto.subtract = duration_add_subtract__subtract; |
| duration_prototype__proto.as = as; |
| duration_prototype__proto.asMilliseconds = asMilliseconds; |
| duration_prototype__proto.asSeconds = asSeconds; |
| duration_prototype__proto.asMinutes = asMinutes; |
| duration_prototype__proto.asHours = asHours; |
| duration_prototype__proto.asDays = asDays; |
| duration_prototype__proto.asWeeks = asWeeks; |
| duration_prototype__proto.asMonths = asMonths; |
| duration_prototype__proto.asYears = asYears; |
| duration_prototype__proto.valueOf = duration_as__valueOf; |
| duration_prototype__proto._bubble = bubble; |
| duration_prototype__proto.get = duration_get__get; |
| duration_prototype__proto.milliseconds = milliseconds; |
| duration_prototype__proto.seconds = seconds; |
| duration_prototype__proto.minutes = minutes; |
| duration_prototype__proto.hours = hours; |
| duration_prototype__proto.days = days; |
| duration_prototype__proto.weeks = weeks; |
| duration_prototype__proto.months = months; |
| duration_prototype__proto.years = years; |
| duration_prototype__proto.humanize = humanize; |
| duration_prototype__proto.toISOString = iso_string__toISOString; |
| duration_prototype__proto.toString = iso_string__toISOString; |
| duration_prototype__proto.toJSON = iso_string__toISOString; |
| duration_prototype__proto.locale = locale; |
| duration_prototype__proto.localeData = localeData; |
| |
| // Deprecations |
| duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString); |
| duration_prototype__proto.lang = lang; |
| |
| // Side effect imports |
| |
| // FORMATTING |
| |
| addFormatToken('X', 0, 0, 'unix'); |
| addFormatToken('x', 0, 0, 'valueOf'); |
| |
| // PARSING |
| |
| addRegexToken('x', matchSigned); |
| addRegexToken('X', matchTimestamp); |
| addParseToken('X', function (input, array, config) { |
| config._d = new Date(parseFloat(input, 10) * 1000); |
| }); |
| addParseToken('x', function (input, array, config) { |
| config._d = new Date(toInt(input)); |
| }); |
| |
| // Side effect imports |
| |
| |
| utils_hooks__hooks.version = '2.14.1'; |
| |
| setHookCallback(local__createLocal); |
| |
| utils_hooks__hooks.fn = momentPrototype; |
| utils_hooks__hooks.min = min; |
| utils_hooks__hooks.max = max; |
| utils_hooks__hooks.now = now; |
| utils_hooks__hooks.utc = create_utc__createUTC; |
| utils_hooks__hooks.unix = moment__createUnix; |
| utils_hooks__hooks.months = lists__listMonths; |
| utils_hooks__hooks.isDate = isDate; |
| utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale; |
| utils_hooks__hooks.invalid = valid__createInvalid; |
| utils_hooks__hooks.duration = create__createDuration; |
| utils_hooks__hooks.isMoment = isMoment; |
| utils_hooks__hooks.weekdays = lists__listWeekdays; |
| utils_hooks__hooks.parseZone = moment__createInZone; |
| utils_hooks__hooks.localeData = locale_locales__getLocale; |
| utils_hooks__hooks.isDuration = isDuration; |
| utils_hooks__hooks.monthsShort = lists__listMonthsShort; |
| utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin; |
| utils_hooks__hooks.defineLocale = defineLocale; |
| utils_hooks__hooks.updateLocale = updateLocale; |
| utils_hooks__hooks.locales = locale_locales__listLocales; |
| utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort; |
| utils_hooks__hooks.normalizeUnits = normalizeUnits; |
| utils_hooks__hooks.relativeTimeRounding = duration_humanize__getSetRelativeTimeRounding; |
| utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold; |
| utils_hooks__hooks.calendarFormat = getCalendarFormat; |
| utils_hooks__hooks.prototype = momentPrototype; |
| |
| var _moment = utils_hooks__hooks; |
| |
| return _moment; |
| |
| })); |
| },{}],"numbro":[function(_dereq_,module,exports){ |
| /*! |
| * numbro.js |
| * version : 1.9.2 |
| * author : Företagsplatsen AB |
| * license : MIT |
| * http://www.foretagsplatsen.se |
| */ |
| |
| (function () { |
| 'use strict'; |
| |
| /************************************ |
| Constants |
| ************************************/ |
| |
| var numbro, |
| VERSION = '1.9.2', |
| binarySuffixes = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'], |
| decimalSuffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], |
| bytes = { |
| general: { scale: 1024, suffixes: decimalSuffixes, marker: 'bd' }, |
| binary: { scale: 1024, suffixes: binarySuffixes, marker: 'b' }, |
| decimal: { scale: 1000, suffixes: decimalSuffixes, marker: 'd' } |
| }, |
| // general must be before the others because it reuses their characters! |
| byteFormatOrder = [ bytes.general, bytes.binary, bytes.decimal ], |
| // internal storage for culture config files |
| cultures = {}, |
| // Todo: Remove in 2.0.0 |
| languages = cultures, |
| currentCulture = 'en-US', |
| zeroFormat = null, |
| defaultFormat = '0,0', |
| defaultCurrencyFormat = '0$', |
| // check for nodeJS |
| hasModule = (typeof module !== 'undefined' && module.exports), |
| // default culture |
| enUS = { |
| delimiters: { |
| thousands: ',', |
| decimal: '.' |
| }, |
| abbreviations: { |
| thousand: 'k', |
| million: 'm', |
| billion: 'b', |
| trillion: 't' |
| }, |
| ordinal: function(number) { |
| var b = number % 10; |
| return (~~(number % 100 / 10) === 1) ? 'th' : |
| (b === 1) ? 'st' : |
| (b === 2) ? 'nd' : |
| (b === 3) ? 'rd' : 'th'; |
| }, |
| currency: { |
| symbol: '$', |
| position: 'prefix' |
| }, |
| defaults: { |
| currencyFormat: ',0000 a' |
| }, |
| formats: { |
| fourDigits: '0000 a', |
| fullWithTwoDecimals: '$ ,0.00', |
| fullWithTwoDecimalsNoCurrency: ',0.00' |
| } |
| }; |
| |
| /************************************ |
| Constructors |
| ************************************/ |
| |
| |
| // Numbro prototype object |
| function Numbro(number) { |
| this._value = number; |
| } |
| |
| function zeroes(count) { |
| var i, ret = ''; |
| |
| for (i = 0; i < count; i++) { |
| ret += '0'; |
| } |
| |
| return ret; |
| } |
| /** |
| * Implementation of toFixed() for numbers with exponents |
| * This function may return negative representations for zero values e.g. "-0.0" |
| */ |
| function toFixedLargeSmall(value, precision) { |
| var mantissa, |
| beforeDec, |
| afterDec, |
| exponent, |
| prefix, |
| endStr, |
| zerosStr, |
| str; |
| |
| str = value.toString(); |
| |
| mantissa = str.split('e')[0]; |
| exponent = str.split('e')[1]; |
| |
| beforeDec = mantissa.split('.')[0]; |
| afterDec = mantissa.split('.')[1] || ''; |
| |
| if (+exponent > 0) { |
| // exponent is positive - add zeros after the numbers |
| str = beforeDec + afterDec + zeroes(exponent - afterDec.length); |
| } else { |
| // exponent is negative |
| |
| if (+beforeDec < 0) { |
| prefix = '-0'; |
| } else { |
| prefix = '0'; |
| } |
| |
| // tack on the decimal point if needed |
| if (precision > 0) { |
| prefix += '.'; |
| } |
| |
| zerosStr = zeroes((-1 * exponent) - 1); |
| // substring off the end to satisfy the precision |
| endStr = (zerosStr + Math.abs(beforeDec) + afterDec).substr(0, precision); |
| str = prefix + endStr; |
| } |
| |
| // only add percision 0's if the exponent is positive |
| if (+exponent > 0 && precision > 0) { |
| str += '.' + zeroes(precision); |
| } |
| |
| return str; |
| } |
| |
| /** |
| * Implementation of toFixed() that treats floats more like decimals |
| * |
| * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present |
| * problems for accounting- and finance-related software. |
| * |
| * Also removes negative signs for zero-formatted numbers. e.g. -0.01 w/ precision 1 -> 0.0 |
| */ |
| function toFixed(value, precision, roundingFunction, optionals) { |
| var power = Math.pow(10, precision), |
| optionalsRegExp, |
| output; |
| |
| if (value.toString().indexOf('e') > -1) { |
| // toFixed returns scientific notation for numbers above 1e21 and below 1e-7 |
| output = toFixedLargeSmall(value, precision); |
| // remove the leading negative sign if it exists and should not be present (e.g. -0.00) |
| if (output.charAt(0) === '-' && +output >= 0) { |
| output = output.substr(1); // chop off the '-' |
| } |
| } |
| else { |
| // Multiply up by precision, round accurately, then divide and use native toFixed(): |
| output = (roundingFunction(value + 'e+' + precision) / power).toFixed(precision); |
| } |
| |
| if (optionals) { |
| optionalsRegExp = new RegExp('0{1,' + optionals + '}$'); |
| output = output.replace(optionalsRegExp, ''); |
| } |
| |
| return output; |
| } |
| |
| /************************************ |
| Formatting |
| ************************************/ |
| |
| // determine what type of formatting we need to do |
| function formatNumbro(n, format, roundingFunction) { |
| var output, |
| escapedFormat = format.replace(/\{[^\{\}]*\}/g, ''); |
| |
| // figure out what kind of format we are dealing with |
| if (escapedFormat.indexOf('$') > -1) { // currency!!!!! |
| output = formatCurrency(n, cultures[currentCulture].currency.symbol, format, roundingFunction); |
| } else if (escapedFormat.indexOf('%') > -1) { // percentage |
| output = formatPercentage(n, format, roundingFunction); |
| } else if (escapedFormat.indexOf(':') > -1) { // time |
| output = formatTime(n, format); |
| } else { // plain ol' numbers or bytes |
| output = formatNumber(n._value, format, roundingFunction); |
| } |
| |
| // return string |
| return output; |
| } |
| |
| // revert to number |
| function unformatNumbro(n, string) { |
| var stringOriginal = string, |
| thousandRegExp, |
| millionRegExp, |
| billionRegExp, |
| trillionRegExp, |
| bytesMultiplier = false, |
| power; |
| |
| if (string.indexOf(':') > -1) { |
| n._value = unformatTime(string); |
| } else { |
| if (string === zeroFormat) { |
| n._value = 0; |
| } else { |
| if (cultures[currentCulture].delimiters.decimal !== '.') { |
| string = string.replace(/\./g, '').replace(cultures[currentCulture].delimiters.decimal, '.'); |
| } |
| |
| // see if abbreviations are there so that we can multiply to the correct number |
| thousandRegExp = new RegExp('[^a-zA-Z]' + cultures[currentCulture].abbreviations.thousand + |
| '(?:\\)|(\\' + cultures[currentCulture].currency.symbol + ')?(?:\\))?)?$'); |
| millionRegExp = new RegExp('[^a-zA-Z]' + cultures[currentCulture].abbreviations.million + |
| '(?:\\)|(\\' + cultures[currentCulture].currency.symbol + ')?(?:\\))?)?$'); |
| billionRegExp = new RegExp('[^a-zA-Z]' + cultures[currentCulture].abbreviations.billion + |
| '(?:\\)|(\\' + cultures[currentCulture].currency.symbol + ')?(?:\\))?)?$'); |
| trillionRegExp = new RegExp('[^a-zA-Z]' + cultures[currentCulture].abbreviations.trillion + |
| '(?:\\)|(\\' + cultures[currentCulture].currency.symbol + ')?(?:\\))?)?$'); |
| |
| // see if bytes are there so that we can multiply to the correct number |
| for (power = 1; power < binarySuffixes.length && !bytesMultiplier; ++power) { |
| if (string.indexOf(binarySuffixes[power]) > -1) { |
| bytesMultiplier = Math.pow(1024, power); |
| } else if (string.indexOf(decimalSuffixes[power]) > -1) { |
| bytesMultiplier = Math.pow(1000, power); |
| } |
| } |
| |
| var str = string.replace(/[^0-9\.]+/g, ''); |
| if (str === '') { |
| // An empty string is not a number. |
| n._value = NaN; |
| |
| } else { |
| // do some math to create our number |
| n._value = ((bytesMultiplier) ? bytesMultiplier : 1) * |
| ((stringOriginal.match(thousandRegExp)) ? Math.pow(10, 3) : 1) * |
| ((stringOriginal.match(millionRegExp)) ? Math.pow(10, 6) : 1) * |
| ((stringOriginal.match(billionRegExp)) ? Math.pow(10, 9) : 1) * |
| ((stringOriginal.match(trillionRegExp)) ? Math.pow(10, 12) : 1) * |
| ((string.indexOf('%') > -1) ? 0.01 : 1) * |
| (((string.split('-').length + |
| Math.min(string.split('(').length - 1, string.split(')').length - 1)) % 2) ? 1 : -1) * |
| Number(str); |
| |
| // round if we are talking about bytes |
| n._value = (bytesMultiplier) ? Math.ceil(n._value) : n._value; |
| } |
| } |
| } |
| return n._value; |
| } |
| |
| function formatCurrency(n, currencySymbol, originalFormat, roundingFunction) { |
| var format = originalFormat, |
| symbolIndex = format.indexOf('$'), |
| openParenIndex = format.indexOf('('), |
| plusSignIndex = format.indexOf('+'), |
| minusSignIndex = format.indexOf('-'), |
| space = '', |
| decimalSeparator = '', |
| spliceIndex, |
| output; |
| |
| if(format.indexOf('$') === -1){ |
| // Use defaults instead of the format provided |
| if (cultures[currentCulture].currency.position === 'infix') { |
| decimalSeparator = currencySymbol; |
| if (cultures[currentCulture].currency.spaceSeparated) { |
| decimalSeparator = ' ' + decimalSeparator + ' '; |
| } |
| } else if (cultures[currentCulture].currency.spaceSeparated) { |
| space = ' '; |
| } |
| } else { |
| // check for space before or after currency |
| if (format.indexOf(' $') > -1) { |
| space = ' '; |
| format = format.replace(' $', ''); |
| } else if (format.indexOf('$ ') > -1) { |
| space = ' '; |
| format = format.replace('$ ', ''); |
| } else { |
| format = format.replace('$', ''); |
| } |
| } |
| |
| // Format The Number |
| output = formatNumber(n._value, format, roundingFunction, decimalSeparator); |
| |
| if (originalFormat.indexOf('$') === -1) { |
| // Use defaults instead of the format provided |
| switch (cultures[currentCulture].currency.position) { |
| case 'postfix': |
| if (output.indexOf(')') > -1) { |
| output = output.split(''); |
| output.splice(-1, 0, space + currencySymbol); |
| output = output.join(''); |
| } else { |
| output = output + space + currencySymbol; |
| } |
| break; |
| case 'infix': |
| break; |
| case 'prefix': |
| if (output.indexOf('(') > -1 || output.indexOf('-') > -1) { |
| output = output.split(''); |
| spliceIndex = Math.max(openParenIndex, minusSignIndex) + 1; |
| |
| output.splice(spliceIndex, 0, currencySymbol + space); |
| output = output.join(''); |
| } else { |
| output = currencySymbol + space + output; |
| } |
| break; |
| default: |
| throw Error('Currency position should be among ["prefix", "infix", "postfix"]'); |
| } |
| } else { |
| // position the symbol |
| if (symbolIndex <= 1) { |
| if (output.indexOf('(') > -1 || output.indexOf('+') > -1 || output.indexOf('-') > -1) { |
| output = output.split(''); |
| spliceIndex = 1; |
| if (symbolIndex < openParenIndex || symbolIndex < plusSignIndex || symbolIndex < minusSignIndex) { |
| // the symbol appears before the "(", "+" or "-" |
| spliceIndex = 0; |
| } |
| output.splice(spliceIndex, 0, currencySymbol + space); |
| output = output.join(''); |
| } else { |
| output = currencySymbol + space + output; |
| } |
| } else { |
| if (output.indexOf(')') > -1) { |
| output = output.split(''); |
| output.splice(-1, 0, space + currencySymbol); |
| output = output.join(''); |
| } else { |
| output = output + space + currencySymbol; |
| } |
| } |
| } |
| |
| return output; |
| } |
| |
| function formatForeignCurrency(n, foreignCurrencySymbol, originalFormat, roundingFunction) { |
| return formatCurrency(n, foreignCurrencySymbol, originalFormat, roundingFunction); |
| } |
| |
| function formatPercentage(n, format, roundingFunction) { |
| var space = '', |
| output, |
| value = n._value * 100; |
| |
| // check for space before % |
| if (format.indexOf(' %') > -1) { |
| space = ' '; |
| format = format.replace(' %', ''); |
| } else { |
| format = format.replace('%', ''); |
| } |
| |
| output = formatNumber(value, format, roundingFunction); |
| |
| if (output.indexOf(')') > -1) { |
| output = output.split(''); |
| output.splice(-1, 0, space + '%'); |
| output = output.join(''); |
| } else { |
| output = output + space + '%'; |
| } |
| |
| return output; |
| } |
| |
| function formatTime(n) { |
| var hours = Math.floor(n._value / 60 / 60), |
| minutes = Math.floor((n._value - (hours * 60 * 60)) / 60), |
| seconds = Math.round(n._value - (hours * 60 * 60) - (minutes * 60)); |
| return hours + ':' + |
| ((minutes < 10) ? '0' + minutes : minutes) + ':' + |
| ((seconds < 10) ? '0' + seconds : seconds); |
| } |
| |
| function unformatTime(string) { |
| var timeArray = string.split(':'), |
| seconds = 0; |
| // turn hours and minutes into seconds and add them all up |
| if (timeArray.length === 3) { |
| // hours |
| seconds = seconds + (Number(timeArray[0]) * 60 * 60); |
| // minutes |
| seconds = seconds + (Number(timeArray[1]) * 60); |
| // seconds |
| seconds = seconds + Number(timeArray[2]); |
| } else if (timeArray.length === 2) { |
| // minutes |
| seconds = seconds + (Number(timeArray[0]) * 60); |
| // seconds |
| seconds = seconds + Number(timeArray[1]); |
| } |
| return Number(seconds); |
| } |
| |
| function formatByteUnits (value, suffixes, scale) { |
| var suffix = suffixes[0], |
| power, |
| min, |
| max, |
| abs = Math.abs(value); |
| |
| if (abs >= scale) { |
| for (power = 1; power < suffixes.length; ++power) { |
| min = Math.pow(scale, power); |
| max = Math.pow(scale, power + 1); |
| |
| if (abs >= min && abs < max) { |
| suffix = suffixes[power]; |
| value = value / min; |
| break; |
| } |
| } |
| |
| // values greater than or equal to [scale] YB never set the suffix |
| if (suffix === suffixes[0]) { |
| value = value / Math.pow(scale, suffixes.length - 1); |
| suffix = suffixes[suffixes.length - 1]; |
| } |
| } |
| |
| return { value: value, suffix: suffix }; |
| } |
| |
| function formatNumber (value, format, roundingFunction, sep) { |
| var negP = false, |
| signed = false, |
| optDec = false, |
| abbr = '', |
| abbrK = false, // force abbreviation to thousands |
| abbrM = false, // force abbreviation to millions |
| abbrB = false, // force abbreviation to billions |
| abbrT = false, // force abbreviation to trillions |
| abbrForce = false, // force abbreviation |
| bytes = '', |
| byteFormat, |
| units, |
| ord = '', |
| abs = Math.abs(value), |
| totalLength, |
| length, |
| minimumPrecision, |
| pow, |
| w, |
| intPrecision, |
| precision, |
| prefix, |
| postfix, |
| thousands, |
| d = '', |
| forcedNeg = false, |
| neg = false, |
| indexOpenP, |
| size, |
| indexMinus, |
| paren = '', |
| minlen, |
| i; |
| |
| // check if number is zero and a custom zero format has been set |
| if (value === 0 && zeroFormat !== null) { |
| return zeroFormat; |
| } |
| |
| if (!isFinite(value)) { |
| return '' + value; |
| } |
| |
| if (format.indexOf('{') === 0) { |
| var end = format.indexOf('}'); |
| if (end === -1) { |
| throw Error('Format should also contain a "}"'); |
| } |
| prefix = format.slice(1, end); |
| format = format.slice(end + 1); |
| } else { |
| prefix = ''; |
| } |
| |
| if (format.indexOf('}') === format.length - 1) { |
| var start = format.indexOf('{'); |
| if (start === -1) { |
| throw Error('Format should also contain a "{"'); |
| } |
| postfix = format.slice(start + 1, -1); |
| format = format.slice(0, start + 1); |
| } else { |
| postfix = ''; |
| } |
| |
| // check for min length |
| var info; |
| if (format.indexOf('.') === -1) { |
| info = format.match(/([0-9]+).*/); |
| } else { |
| info = format.match(/([0-9]+)\..*/); |
| } |
| minlen = info === null ? -1 : info[1].length; |
| |
| // see if we should use parentheses for negative number or if we should prefix with a sign |
| // if both are present we default to parentheses |
| if (format.indexOf('-') !== -1) { |
| forcedNeg = true; |
| } |
| if (format.indexOf('(') > -1) { |
| negP = true; |
| format = format.slice(1, -1); |
| } else if (format.indexOf('+') > -1) { |
| signed = true; |
| format = format.replace(/\+/g, ''); |
| } |
| |
| // see if abbreviation is wanted |
| if (format.indexOf('a') > -1) { |
| intPrecision = format.split('.')[0].match(/[0-9]+/g) || ['0']; |
| intPrecision = parseInt(intPrecision[0], 10); |
| |
| // check if abbreviation is specified |
| abbrK = format.indexOf('aK') >= 0; |
| abbrM = format.indexOf('aM') >= 0; |
| abbrB = format.indexOf('aB') >= 0; |
| abbrT = format.indexOf('aT') >= 0; |
| abbrForce = abbrK || abbrM || abbrB || abbrT; |
| |
| // check for space before abbreviation |
| if (format.indexOf(' a') > -1) { |
| abbr = ' '; |
| format = format.replace(' a', ''); |
| } else { |
| format = format.replace('a', ''); |
| } |
| |
| totalLength = Math.floor(Math.log(abs) / Math.LN10) + 1; |
| |
| minimumPrecision = totalLength % 3; |
| minimumPrecision = minimumPrecision === 0 ? 3 : minimumPrecision; |
| |
| if (intPrecision && abs !== 0) { |
| |
| length = Math.floor(Math.log(abs) / Math.LN10) + 1 - intPrecision; |
| |
| pow = 3 * ~~((Math.min(intPrecision, totalLength) - minimumPrecision) / 3); |
| |
| abs = abs / Math.pow(10, pow); |
| |
| if (format.indexOf('.') === -1 && intPrecision > 3) { |
| format += '[.]'; |
| |
| size = length === 0 ? 0 : 3 * ~~(length / 3) - length; |
| size = size < 0 ? size + 3 : size; |
| |
| format += zeroes(size); |
| } |
| } |
| |
| if (Math.floor(Math.log(Math.abs(value)) / Math.LN10) + 1 !== intPrecision) { |
| if (abs >= Math.pow(10, 12) && !abbrForce || abbrT) { |
| // trillion |
| abbr = abbr + cultures[currentCulture].abbreviations.trillion; |
| value = value / Math.pow(10, 12); |
| } else if (abs < Math.pow(10, 12) && abs >= Math.pow(10, 9) && !abbrForce || abbrB) { |
| // billion |
| abbr = abbr + cultures[currentCulture].abbreviations.billion; |
| value = value / Math.pow(10, 9); |
| } else if (abs < Math.pow(10, 9) && abs >= Math.pow(10, 6) && !abbrForce || abbrM) { |
| // million |
| abbr = abbr + cultures[currentCulture].abbreviations.million; |
| value = value / Math.pow(10, 6); |
| } else if (abs < Math.pow(10, 6) && abs >= Math.pow(10, 3) && !abbrForce || abbrK) { |
| // thousand |
| abbr = abbr + cultures[currentCulture].abbreviations.thousand; |
| value = value / Math.pow(10, 3); |
| } |
| } |
| } |
| |
| // see if we are formatting |
| // binary-decimal bytes (1024 MB), binary bytes (1024 MiB), or decimal bytes (1000 MB) |
| for (i = 0; i < byteFormatOrder.length; ++i) { |
| byteFormat = byteFormatOrder[i]; |
| |
| if (format.indexOf(byteFormat.marker) > -1) { |
| // check for space before |
| if (format.indexOf(' ' + byteFormat.marker) >-1) { |
| bytes = ' '; |
| } |
| |
| // remove the marker (with the space if it had one) |
| format = format.replace(bytes + byteFormat.marker, ''); |
| |
| units = formatByteUnits(value, byteFormat.suffixes, byteFormat.scale); |
| |
| value = units.value; |
| bytes = bytes + units.suffix; |
| |
| break; |
| } |
| } |
| |
| // see if ordinal is wanted |
| if (format.indexOf('o') > -1) { |
| // check for space before |
| if (format.indexOf(' o') > -1) { |
| ord = ' '; |
| format = format.replace(' o', ''); |
| } else { |
| format = format.replace('o', ''); |
| } |
| |
| if (cultures[currentCulture].ordinal) { |
| ord = ord + cultures[currentCulture].ordinal(value); |
| } |
| } |
| |
| if (format.indexOf('[.]') > -1) { |
| optDec = true; |
| format = format.replace('[.]', '.'); |
| } |
| |
| w = value.toString().split('.')[0]; |
| precision = format.split('.')[1]; |
| thousands = format.indexOf(','); |
| |
| if (precision) { |
| if (precision.indexOf('*') !== -1) { |
| d = toFixed(value, value.toString().split('.')[1].length, roundingFunction); |
| } else { |
| if (precision.indexOf('[') > -1) { |
| precision = precision.replace(']', ''); |
| precision = precision.split('['); |
| d = toFixed(value, (precision[0].length + precision[1].length), roundingFunction, |
| precision[1].length); |
| } else { |
| d = toFixed(value, precision.length, roundingFunction); |
| } |
| } |
| |
| w = d.split('.')[0]; |
| |
| if (d.split('.')[1].length) { |
| var p = sep ? abbr + sep : cultures[currentCulture].delimiters.decimal; |
| d = p + d.split('.')[1]; |
| } else { |
| d = ''; |
| } |
| |
| if (optDec && Number(d.slice(1)) === 0) { |
| d = ''; |
| } |
| } else { |
| w = toFixed(value, 0, roundingFunction); |
| } |
| |
| // format number |
| if (w.indexOf('-') > -1) { |
| w = w.slice(1); |
| neg = true; |
| } |
| |
| if (w.length < minlen) { |
| w = zeroes(minlen - w.length) + w; |
| } |
| |
| if (thousands > -1) { |
| w = w.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + |
| cultures[currentCulture].delimiters.thousands); |
| } |
| |
| if (format.indexOf('.') === 0) { |
| w = ''; |
| } |
| |
| indexOpenP = format.indexOf('('); |
| indexMinus = format.indexOf('-'); |
| |
| if (indexOpenP < indexMinus) { |
| paren = ((negP && neg) ? '(' : '') + (((forcedNeg && neg) || (!negP && neg)) ? '-' : ''); |
| } else { |
| paren = (((forcedNeg && neg) || (!negP && neg)) ? '-' : '') + ((negP && neg) ? '(' : ''); |
| } |
| |
| return prefix + |
| paren + ((!neg && signed && value !== 0) ? '+' : '') + |
| w + d + |
| ((ord) ? ord : '') + |
| ((abbr && !sep) ? abbr : '') + |
| ((bytes) ? bytes : '') + |
| ((negP && neg) ? ')' : '') + |
| postfix; |
| } |
| |
| /************************************ |
| Top Level Functions |
| ************************************/ |
| |
| numbro = function(input) { |
| if (numbro.isNumbro(input)) { |
| input = input.value(); |
| } else if (input === 0 || typeof input === 'undefined') { |
| input = 0; |
| } else if (!Number(input)) { |
| input = numbro.fn.unformat(input); |
| } |
| |
| return new Numbro(Number(input)); |
| }; |
| |
| // version number |
| numbro.version = VERSION; |
| |
| // compare numbro object |
| numbro.isNumbro = function(obj) { |
| return obj instanceof Numbro; |
| }; |
| |
| /** |
| * This function allow the user to set a new language with a fallback if |
| * the language does not exist. If no fallback language is provided, |
| * it fallbacks to english. |
| * |
| * @deprecated Since in version 1.6.0. It will be deleted in version 2.0 |
| * `setCulture` should be used instead. |
| */ |
| numbro.setLanguage = function(newLanguage, fallbackLanguage) { |
| console.warn('`setLanguage` is deprecated since version 1.6.0. Use `setCulture` instead'); |
| var key = newLanguage, |
| prefix = newLanguage.split('-')[0], |
| matchingLanguage = null; |
| if (!languages[key]) { |
| Object.keys(languages).forEach(function(language) { |
| if (!matchingLanguage && language.split('-')[0] === prefix) { |
| matchingLanguage = language; |
| } |
| }); |
| key = matchingLanguage || fallbackLanguage || 'en-US'; |
| } |
| chooseCulture(key); |
| }; |
| |
| /** |
| * This function allow the user to set a new culture with a fallback if |
| * the culture does not exist. If no fallback culture is provided, |
| * it falls back to "en-US". |
| */ |
| numbro.setCulture = function(newCulture, fallbackCulture) { |
| var key = newCulture, |
| suffix = newCulture.split('-')[1], |
| matchingCulture = null; |
| if (!cultures[key]) { |
| if (suffix) { |
| Object.keys(cultures).forEach(function(language) { |
| if (!matchingCulture && language.split('-')[1] === suffix) { |
| matchingCulture = language; |
| } |
| }); |
| } |
| |
| key = matchingCulture || fallbackCulture || 'en-US'; |
| } |
| chooseCulture(key); |
| }; |
| |
| /** |
| * This function will load languages and then set the global language. If |
| * no arguments are passed in, it will simply return the current global |
| * language key. |
| * |
| * @deprecated Since in version 1.6.0. It will be deleted in version 2.0 |
| * `culture` should be used instead. |
| */ |
| numbro.language = function(key, values) { |
| console.warn('`language` is deprecated since version 1.6.0. Use `culture` instead'); |
| |
| if (!key) { |
| return currentCulture; |
| } |
| |
| if (key && !values) { |
| if (!languages[key]) { |
| throw new Error('Unknown language : ' + key); |
| } |
| chooseCulture(key); |
| } |
| |
| if (values || !languages[key]) { |
| setCulture(key, values); |
| } |
| |
| return numbro; |
| }; |
| |
| /** |
| * This function will load cultures and then set the global culture. If |
| * no arguments are passed in, it will simply return the current global |
| * culture code. |
| */ |
| numbro.culture = function(code, values) { |
| if (!code) { |
| return currentCulture; |
| } |
| |
| if (code && !values) { |
| if (!cultures[code]) { |
| throw new Error('Unknown culture : ' + code); |
| } |
| chooseCulture(code); |
| } |
| |
| if (values || !cultures[code]) { |
| setCulture(code, values); |
| } |
| |
| return numbro; |
| }; |
| |
| /** |
| * This function provides access to the loaded language data. If |
| * no arguments are passed in, it will simply return the current |
| * global language object. |
| * |
| * @deprecated Since in version 1.6.0. It will be deleted in version 2.0 |
| * `culture` should be used instead. |
| */ |
| numbro.languageData = function(key) { |
| console.warn('`languageData` is deprecated since version 1.6.0. Use `cultureData` instead'); |
| |
| if (!key) { |
| return languages[currentCulture]; |
| } |
| |
| if (!languages[key]) { |
| throw new Error('Unknown language : ' + key); |
| } |
| |
| return languages[key]; |
| }; |
| |
| /** |
| * This function provides access to the loaded culture data. If |
| * no arguments are passed in, it will simply return the current |
| * global culture object. |
| */ |
| numbro.cultureData = function(code) { |
| if (!code) { |
| return cultures[currentCulture]; |
| } |
| |
| if (!cultures[code]) { |
| throw new Error('Unknown culture : ' + code); |
| } |
| |
| return cultures[code]; |
| }; |
| |
| numbro.culture('en-US', enUS); |
| |
| /** |
| * @deprecated Since in version 1.6.0. It will be deleted in version 2.0 |
| * `cultures` should be used instead. |
| */ |
| numbro.languages = function() { |
| console.warn('`languages` is deprecated since version 1.6.0. Use `cultures` instead'); |
| |
| return languages; |
| }; |
| |
| numbro.cultures = function() { |
| return cultures; |
| }; |
| |
| numbro.zeroFormat = function(format) { |
| zeroFormat = typeof(format) === 'string' ? format : null; |
| }; |
| |
| numbro.defaultFormat = function(format) { |
| defaultFormat = typeof(format) === 'string' ? format : '0.0'; |
| }; |
| |
| numbro.defaultCurrencyFormat = function (format) { |
| defaultCurrencyFormat = typeof(format) === 'string' ? format : '0$'; |
| }; |
| |
| numbro.validate = function(val, culture) { |
| |
| var _decimalSep, |
| _thousandSep, |
| _currSymbol, |
| _valArray, |
| _abbrObj, |
| _thousandRegEx, |
| cultureData, |
| temp; |
| |
| //coerce val to string |
| if (typeof val !== 'string') { |
| val += ''; |
| if (console.warn) { |
| console.warn('Numbro.js: Value is not string. It has been co-erced to: ', val); |
| } |
| } |
| |
| //trim whitespaces from either sides |
| val = val.trim(); |
| |
| //replace the initial '+' or '-' sign if present |
| val = val.replace(/^[+-]?/, ''); |
| |
| //if val is just digits return true |
| if ( !! val.match(/^\d+$/)) { |
| return true; |
| } |
| |
| //if val is empty return false |
| if (val === '') { |
| return false; |
| } |
| |
| //get the decimal and thousands separator from numbro.cultureData |
| try { |
| //check if the culture is understood by numbro. if not, default it to current culture |
| cultureData = numbro.cultureData(culture); |
| } catch (e) { |
| cultureData = numbro.cultureData(numbro.culture()); |
| } |
| |
| //setup the delimiters and currency symbol based on culture |
| _currSymbol = cultureData.currency.symbol; |
| _abbrObj = cultureData.abbreviations; |
| _decimalSep = cultureData.delimiters.decimal; |
| if (cultureData.delimiters.thousands === '.') { |
| _thousandSep = '\\.'; |
| } else { |
| _thousandSep = cultureData.delimiters.thousands; |
| } |
| |
| // validating currency symbol |
| temp = val.match(/^[^\d\.\,]+/); |
| if (temp !== null) { |
| val = val.substr(1); |
| if (temp[0] !== _currSymbol) { |
| return false; |
| } |
| } |
| |
| //validating abbreviation symbol |
| temp = val.match(/[^\d]+$/); |
| if (temp !== null) { |
| val = val.slice(0, -1); |
| if (temp[0] !== _abbrObj.thousand && temp[0] !== _abbrObj.million && |
| temp[0] !== _abbrObj.billion && temp[0] !== _abbrObj.trillion) { |
| return false; |
| } |
| } |
| |
| _thousandRegEx = new RegExp(_thousandSep + '{2}'); |
| |
| if (!val.match(/[^\d.,]/g)) { |
| _valArray = val.split(_decimalSep); |
| if (_valArray.length > 2) { |
| return false; |
| } else { |
| if (_valArray.length < 2) { |
| return ( !! _valArray[0].match(/^\d+.*\d$/) && !_valArray[0].match(_thousandRegEx)); |
| } else { |
| if (_valArray[0] === '') { |
| // for values without leading zero eg. .984 |
| return (!_valArray[0].match(_thousandRegEx) && |
| !!_valArray[1].match(/^\d+$/)); |
| |
| } else if (_valArray[0].length === 1) { |
| return ( !! _valArray[0].match(/^\d+$/) && |
| !_valArray[0].match(_thousandRegEx) && |
| !! _valArray[1].match(/^\d+$/)); |
| } else { |
| return ( !! _valArray[0].match(/^\d+.*\d$/) && |
| !_valArray[0].match(_thousandRegEx) && |
| !! _valArray[1].match(/^\d+$/)); |
| } |
| } |
| } |
| } |
| |
| return false; |
| }; |
| |
| /** |
| * * @deprecated Since in version 1.6.0. It will be deleted in version 2.0 |
| * `loadCulturesInNode` should be used instead. |
| */ |
| numbro.loadLanguagesInNode = function() { |
| console.warn('`loadLanguagesInNode` is deprecated since version 1.6.0. Use `loadCulturesInNode` instead'); |
| |
| numbro.loadCulturesInNode(); |
| }; |
| |
| numbro.loadCulturesInNode = function() { |
| // TODO: Rename the folder in 2.0.0 |
| var cultures = _dereq_('./languages'); |
| |
| for(var langLocaleCode in cultures) { |
| if(langLocaleCode) { |
| numbro.culture(langLocaleCode, cultures[langLocaleCode]); |
| } |
| } |
| }; |
| |
| /************************************ |
| Helpers |
| ************************************/ |
| |
| function setCulture(code, values) { |
| cultures[code] = values; |
| } |
| |
| function chooseCulture(code) { |
| currentCulture = code; |
| var defaults = cultures[code].defaults; |
| if (defaults && defaults.format) { |
| numbro.defaultFormat(defaults.format); |
| } |
| if (defaults && defaults.currencyFormat) { |
| numbro.defaultCurrencyFormat(defaults.currencyFormat); |
| } |
| } |
| |
| function inNodejsRuntime() { |
| return (typeof process !== 'undefined') && |
| (process.browser === undefined) && |
| process.title && |
| (process.title.indexOf('node') === 0 || process.title === 'grunt' || process.title === 'gulp') && |
| (typeof _dereq_ !== 'undefined'); |
| } |
| |
| /************************************ |
| Floating-point helpers |
| ************************************/ |
| |
| // The floating-point helper functions and implementation |
| // borrows heavily from sinful.js: http://guipn.github.io/sinful.js/ |
| |
| /** |
| * Array.prototype.reduce for browsers that don't support it |
| * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#Compatibility |
| */ |
| if ('function' !== typeof Array.prototype.reduce) { |
| Array.prototype.reduce = function(callback, optInitialValue) { |
| |
| if (null === this || 'undefined' === typeof this) { |
| // At the moment all modern browsers, that support strict mode, have |
| // native implementation of Array.prototype.reduce. For instance, IE8 |
| // does not support strict mode, so this check is actually useless. |
| throw new TypeError('Array.prototype.reduce called on null or undefined'); |
| } |
| |
| if ('function' !== typeof callback) { |
| throw new TypeError(callback + ' is not a function'); |
| } |
| |
| var index, |
| value, |
| length = this.length >>> 0, |
| isValueSet = false; |
| |
| if (1 < arguments.length) { |
| value = optInitialValue; |
| isValueSet = true; |
| } |
| |
| for (index = 0; length > index; ++index) { |
| if (this.hasOwnProperty(index)) { |
| if (isValueSet) { |
| value = callback(value, this[index], index, this); |
| } else { |
| value = this[index]; |
| isValueSet = true; |
| } |
| } |
| } |
| |
| if (!isValueSet) { |
| throw new TypeError('Reduce of empty array with no initial value'); |
| } |
| |
| return value; |
| }; |
| } |
| |
| |
| /** |
| * Computes the multiplier necessary to make x >= 1, |
| * effectively eliminating miscalculations caused by |
| * finite precision. |
| */ |
| function multiplier(x) { |
| var parts = x.toString().split('.'); |
| if (parts.length < 2) { |
| return 1; |
| } |
| return Math.pow(10, parts[1].length); |
| } |
| |
| /** |
| * Given a variable number of arguments, returns the maximum |
| * multiplier that must be used to normalize an operation involving |
| * all of them. |
| */ |
| function correctionFactor() { |
| var args = Array.prototype.slice.call(arguments); |
| return args.reduce(function(prev, next) { |
| var mp = multiplier(prev), |
| mn = multiplier(next); |
| return mp > mn ? mp : mn; |
| }, -Infinity); |
| } |
| |
| /************************************ |
| Numbro Prototype |
| ************************************/ |
| |
| |
| numbro.fn = Numbro.prototype = { |
| |
| clone: function() { |
| return numbro(this); |
| }, |
| |
| format: function(inputString, roundingFunction) { |
| return formatNumbro(this, |
| inputString ? inputString : defaultFormat, |
| (roundingFunction !== undefined) ? roundingFunction : Math.round |
| ); |
| }, |
| |
| formatCurrency: function(inputString, roundingFunction) { |
| return formatCurrency(this, |
| cultures[currentCulture].currency.symbol, |
| inputString ? inputString : defaultCurrencyFormat, |
| (roundingFunction !== undefined) ? roundingFunction : Math.round |
| ); |
| }, |
| |
| formatForeignCurrency: function(currencySymbol, inputString, roundingFunction) { |
| return formatForeignCurrency(this, |
| currencySymbol, |
| inputString ? inputString : defaultCurrencyFormat, |
| (roundingFunction !== undefined) ? roundingFunction : Math.round |
| ); |
| }, |
| |
| unformat: function(inputString) { |
| if (typeof inputString === 'number') { |
| return inputString; |
| } else if (typeof inputString === 'string') { |
| var result = unformatNumbro(this, inputString); |
| |
| // Any unparseable string (represented as NaN in the result) is |
| // converted into undefined. |
| return isNaN(result) ? undefined : result; |
| } else { |
| return undefined; |
| } |
| }, |
| |
| binaryByteUnits: function() { |
| return formatByteUnits(this._value, bytes.binary.suffixes, bytes.binary.scale).suffix; |
| }, |
| |
| byteUnits: function() { |
| return formatByteUnits(this._value, bytes.general.suffixes, bytes.general.scale).suffix; |
| }, |
| |
| decimalByteUnits: function() { |
| return formatByteUnits(this._value, bytes.decimal.suffixes, bytes.decimal.scale).suffix; |
| }, |
| |
| value: function() { |
| return this._value; |
| }, |
| |
| valueOf: function() { |
| return this._value; |
| }, |
| |
| set: function(value) { |
| this._value = Number(value); |
| return this; |
| }, |
| |
| add: function(value) { |
| var corrFactor = correctionFactor.call(null, this._value, value); |
| |
| function cback(accum, curr) { |
| return accum + corrFactor * curr; |
| } |
| this._value = [this._value, value].reduce(cback, 0) / corrFactor; |
| return this; |
| }, |
| |
| subtract: function(value) { |
| var corrFactor = correctionFactor.call(null, this._value, value); |
| |
| function cback(accum, curr) { |
| return accum - corrFactor * curr; |
| } |
| this._value = [value].reduce(cback, this._value * corrFactor) / corrFactor; |
| return this; |
| }, |
| |
| multiply: function(value) { |
| function cback(accum, curr) { |
| var corrFactor = correctionFactor(accum, curr), |
| result = accum * corrFactor; |
| result *= curr * corrFactor; |
| result /= corrFactor * corrFactor; |
| return result; |
| } |
| this._value = [this._value, value].reduce(cback, 1); |
| return this; |
| }, |
| |
| divide: function(value) { |
| function cback(accum, curr) { |
| var corrFactor = correctionFactor(accum, curr); |
| return (accum * corrFactor) / (curr * corrFactor); |
| } |
| this._value = [this._value, value].reduce(cback); |
| return this; |
| }, |
| |
| difference: function(value) { |
| return Math.abs(numbro(this._value).subtract(value).value()); |
| } |
| |
| }; |
| |
| /************************************ |
| Exposing Numbro |
| ************************************/ |
| |
| if (inNodejsRuntime()) { |
| //Todo: Rename the folder in 2.0.0 |
| numbro.loadCulturesInNode(); |
| } |
| |
| // CommonJS module is defined |
| if (hasModule) { |
| module.exports = numbro; |
| } else { |
| /*global ender:false */ |
| if (typeof ender === 'undefined') { |
| // here, `this` means `window` in the browser, or `global` on the server |
| // add `numbro` as a global object via a string identifier, |
| // for Closure Compiler 'advanced' mode |
| this.numbro = numbro; |
| } |
| |
| /*global define:false */ |
| if (typeof define === 'function' && define.amd) { |
| define([], function() { |
| return numbro; |
| }); |
| } |
| } |
| |
| }.call(typeof window === 'undefined' ? this : window)); |
| |
| },{"languages":1}],"pikaday":[function(_dereq_,module,exports){ |
| /*! |
| * Pikaday |
| * |
| * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/dbushell/Pikaday |
| */ |
| |
| (function (root, factory) |
| { |
| 'use strict'; |
| |
| var moment; |
| if (typeof exports === 'object') { |
| // CommonJS module |
| // Load moment.js as an optional dependency |
| try { moment = _dereq_('moment'); } catch (e) {} |
| module.exports = factory(moment); |
| } else if (typeof define === 'function' && define.amd) { |
| // AMD. Register as an anonymous module. |
| define(function (req) |
| { |
| // Load moment.js as an optional dependency |
| var id = 'moment'; |
| try { moment = req(id); } catch (e) {} |
| return factory(moment); |
| }); |
| } else { |
| root.Pikaday = factory(root.moment); |
| } |
| }(this, function (moment) |
| { |
| 'use strict'; |
| |
| /** |
| * feature detection and helper functions |
| */ |
| var hasMoment = typeof moment === 'function', |
| |
| hasEventListeners = !!window.addEventListener, |
| |
| document = window.document, |
| |
| sto = window.setTimeout, |
| |
| addEvent = function(el, e, callback, capture) |
| { |
| if (hasEventListeners) { |
| el.addEventListener(e, callback, !!capture); |
| } else { |
| el.attachEvent('on' + e, callback); |
| } |
| }, |
| |
| removeEvent = function(el, e, callback, capture) |
| { |
| if (hasEventListeners) { |
| el.removeEventListener(e, callback, !!capture); |
| } else { |
| el.detachEvent('on' + e, callback); |
| } |
| }, |
| |
| fireEvent = function(el, eventName, data) |
| { |
| var ev; |
| |
| if (document.createEvent) { |
| ev = document.createEvent('HTMLEvents'); |
| ev.initEvent(eventName, true, false); |
| ev = extend(ev, data); |
| el.dispatchEvent(ev); |
| } else if (document.createEventObject) { |
| ev = document.createEventObject(); |
| ev = extend(ev, data); |
| el.fireEvent('on' + eventName, ev); |
| } |
| }, |
| |
| trim = function(str) |
| { |
| return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g,''); |
| }, |
| |
| hasClass = function(el, cn) |
| { |
| return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1; |
| }, |
| |
| addClass = function(el, cn) |
| { |
| if (!hasClass(el, cn)) { |
| el.className = (el.className === '') ? cn : el.className + ' ' + cn; |
| } |
| }, |
| |
| removeClass = function(el, cn) |
| { |
| el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' ')); |
| }, |
| |
| isArray = function(obj) |
| { |
| return (/Array/).test(Object.prototype.toString.call(obj)); |
| }, |
| |
| isDate = function(obj) |
| { |
| return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime()); |
| }, |
| |
| isWeekend = function(date) |
| { |
| var day = date.getDay(); |
| return day === 0 || day === 6; |
| }, |
| |
| isLeapYear = function(year) |
| { |
| // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951 |
| return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; |
| }, |
| |
| getDaysInMonth = function(year, month) |
| { |
| return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]; |
| }, |
| |
| setToStartOfDay = function(date) |
| { |
| if (isDate(date)) date.setHours(0,0,0,0); |
| }, |
| |
| compareDates = function(a,b) |
| { |
| // weak date comparison (use setToStartOfDay(date) to ensure correct result) |
| return a.getTime() === b.getTime(); |
| }, |
| |
| extend = function(to, from, overwrite) |
| { |
| var prop, hasProp; |
| for (prop in from) { |
| hasProp = to[prop] !== undefined; |
| if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) { |
| if (isDate(from[prop])) { |
| if (overwrite) { |
| to[prop] = new Date(from[prop].getTime()); |
| } |
| } |
| else if (isArray(from[prop])) { |
| if (overwrite) { |
| to[prop] = from[prop].slice(0); |
| } |
| } else { |
| to[prop] = extend({}, from[prop], overwrite); |
| } |
| } else if (overwrite || !hasProp) { |
| to[prop] = from[prop]; |
| } |
| } |
| return to; |
| }, |
| |
| adjustCalendar = function(calendar) { |
| if (calendar.month < 0) { |
| calendar.year -= Math.ceil(Math.abs(calendar.month)/12); |
| calendar.month += 12; |
| } |
| if (calendar.month > 11) { |
| calendar.year += Math.floor(Math.abs(calendar.month)/12); |
| calendar.month -= 12; |
| } |
| return calendar; |
| }, |
| |
| /** |
| * defaults and localisation |
| */ |
| defaults = { |
| |
| // bind the picker to a form field |
| field: null, |
| |
| // automatically show/hide the picker on `field` focus (default `true` if `field` is set) |
| bound: undefined, |
| |
| // position of the datepicker, relative to the field (default to bottom & left) |
| // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position) |
| position: 'bottom left', |
| |
| // automatically fit in the viewport even if it means repositioning from the position option |
| reposition: true, |
| |
| // the default output format for `.toString()` and `field` value |
| format: 'YYYY-MM-DD', |
| |
| // the initial date to view when first opened |
| defaultDate: null, |
| |
| // make the `defaultDate` the initial selected value |
| setDefaultDate: false, |
| |
| // first day of week (0: Sunday, 1: Monday etc) |
| firstDay: 0, |
| |
| // the minimum/earliest date that can be selected |
| minDate: null, |
| // the maximum/latest date that can be selected |
| maxDate: null, |
| |
| // number of years either side, or array of upper/lower range |
| yearRange: 10, |
| |
| // show week numbers at head of row |
| showWeekNumber: false, |
| |
| // used internally (don't config outside) |
| minYear: 0, |
| maxYear: 9999, |
| minMonth: undefined, |
| maxMonth: undefined, |
| |
| startRange: null, |
| endRange: null, |
| |
| isRTL: false, |
| |
| // Additional text to append to the year in the calendar title |
| yearSuffix: '', |
| |
| // Render the month after year in the calendar title |
| showMonthAfterYear: false, |
| |
| // how many months are visible |
| numberOfMonths: 1, |
| |
| // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`) |
| // only used for the first display or when a selected date is not visible |
| mainCalendar: 'left', |
| |
| // Specify a DOM element to render the calendar in |
| container: undefined, |
| |
| // internationalization |
| i18n: { |
| previousMonth : 'Previous Month', |
| nextMonth : 'Next Month', |
| months : ['January','February','March','April','May','June','July','August','September','October','November','December'], |
| weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'], |
| weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] |
| }, |
| |
| // Theme Classname |
| theme: null, |
| |
| // callback function |
| onSelect: null, |
| onOpen: null, |
| onClose: null, |
| onDraw: null |
| }, |
| |
| |
| /** |
| * templating functions to abstract HTML rendering |
| */ |
| renderDayName = function(opts, day, abbr) |
| { |
| day += opts.firstDay; |
| while (day >= 7) { |
| day -= 7; |
| } |
| return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day]; |
| }, |
| |
| renderDay = function(opts) |
| { |
| if (opts.isEmpty) { |
| return '<td class="is-empty"></td>'; |
| } |
| var arr = []; |
| if (opts.isDisabled) { |
| arr.push('is-disabled'); |
| } |
| if (opts.isToday) { |
| arr.push('is-today'); |
| } |
| if (opts.isSelected) { |
| arr.push('is-selected'); |
| } |
| if (opts.isInRange) { |
| arr.push('is-inrange'); |
| } |
| if (opts.isStartRange) { |
| arr.push('is-startrange'); |
| } |
| if (opts.isEndRange) { |
| arr.push('is-endrange'); |
| } |
| return '<td data-day="' + opts.day + '" class="' + arr.join(' ') + '">' + |
| '<button class="pika-button pika-day" type="button" ' + |
| 'data-pika-year="' + opts.year + '" data-pika-month="' + opts.month + '" data-pika-day="' + opts.day + '">' + |
| opts.day + |
| '</button>' + |
| '</td>'; |
| }, |
| |
| renderWeek = function (d, m, y) { |
| // Lifted from http://javascript.about.com/library/blweekyear.htm, lightly modified. |
| var onejan = new Date(y, 0, 1), |
| weekNum = Math.ceil((((new Date(y, m, d) - onejan) / 86400000) + onejan.getDay()+1)/7); |
| return '<td class="pika-week">' + weekNum + '</td>'; |
| }, |
| |
| renderRow = function(days, isRTL) |
| { |
| return '<tr>' + (isRTL ? days.reverse() : days).join('') + '</tr>'; |
| }, |
| |
| renderBody = function(rows) |
| { |
| return '<tbody>' + rows.join('') + '</tbody>'; |
| }, |
| |
| renderHead = function(opts) |
| { |
| var i, arr = []; |
| if (opts.showWeekNumber) { |
| arr.push('<th></th>'); |
| } |
| for (i = 0; i < 7; i++) { |
| arr.push('<th scope="col"><abbr title="' + renderDayName(opts, i) + '">' + renderDayName(opts, i, true) + '</abbr></th>'); |
| } |
| return '<thead>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</thead>'; |
| }, |
| |
| renderTitle = function(instance, c, year, month, refYear) |
| { |
| var i, j, arr, |
| opts = instance._o, |
| isMinYear = year === opts.minYear, |
| isMaxYear = year === opts.maxYear, |
| html = '<div class="pika-title">', |
| monthHtml, |
| yearHtml, |
| prev = true, |
| next = true; |
| |
| for (arr = [], i = 0; i < 12; i++) { |
| arr.push('<option value="' + (year === refYear ? i - c : 12 + i - c) + '"' + |
| (i === month ? ' selected': '') + |
| ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth) ? 'disabled' : '') + '>' + |
| opts.i18n.months[i] + '</option>'); |
| } |
| monthHtml = '<div class="pika-label">' + opts.i18n.months[month] + '<select class="pika-select pika-select-month" tabindex="-1">' + arr.join('') + '</select></div>'; |
| |
| if (isArray(opts.yearRange)) { |
| i = opts.yearRange[0]; |
| j = opts.yearRange[1] + 1; |
| } else { |
| i = year - opts.yearRange; |
| j = 1 + year + opts.yearRange; |
| } |
| |
| for (arr = []; i < j && i <= opts.maxYear; i++) { |
| if (i >= opts.minYear) { |
| arr.push('<option value="' + i + '"' + (i === year ? ' selected': '') + '>' + (i) + '</option>'); |
| } |
| } |
| yearHtml = '<div class="pika-label">' + year + opts.yearSuffix + '<select class="pika-select pika-select-year" tabindex="-1">' + arr.join('') + '</select></div>'; |
| |
| if (opts.showMonthAfterYear) { |
| html += yearHtml + monthHtml; |
| } else { |
| html += monthHtml + yearHtml; |
| } |
| |
| if (isMinYear && (month === 0 || opts.minMonth >= month)) { |
| prev = false; |
| } |
| |
| if (isMaxYear && (month === 11 || opts.maxMonth <= month)) { |
| next = false; |
| } |
| |
| if (c === 0) { |
| html += '<button class="pika-prev' + (prev ? '' : ' is-disabled') + '" type="button">' + opts.i18n.previousMonth + '</button>'; |
| } |
| if (c === (instance._o.numberOfMonths - 1) ) { |
| html += '<button class="pika-next' + (next ? '' : ' is-disabled') + '" type="button">' + opts.i18n.nextMonth + '</button>'; |
| } |
| |
| return html += '</div>'; |
| }, |
| |
| renderTable = function(opts, data) |
| { |
| return '<table cellpadding="0" cellspacing="0" class="pika-table">' + renderHead(opts) + renderBody(data) + '</table>'; |
| }, |
| |
| |
| /** |
| * Pikaday constructor |
| */ |
| Pikaday = function(options) |
| { |
| var self = this, |
| opts = self.config(options); |
| |
| self._onMouseDown = function(e) |
| { |
| if (!self._v) { |
| return; |
| } |
| e = e || window.event; |
| var target = e.target || e.srcElement; |
| if (!target) { |
| return; |
| } |
| |
| if (!hasClass(target, 'is-disabled')) { |
| if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty')) { |
| self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day'))); |
| if (opts.bound) { |
| sto(function() { |
| self.hide(); |
| if (opts.field) { |
| opts.field.blur(); |
| } |
| }, 100); |
| } |
| } |
| else if (hasClass(target, 'pika-prev')) { |
| self.prevMonth(); |
| } |
| else if (hasClass(target, 'pika-next')) { |
| self.nextMonth(); |
| } |
| } |
| if (!hasClass(target, 'pika-select')) { |
| // if this is touch event prevent mouse events emulation |
| if (e.preventDefault) { |
| e.preventDefault(); |
| } else { |
| e.returnValue = false; |
| return false; |
| } |
| } else { |
| self._c = true; |
| } |
| }; |
| |
| self._onChange = function(e) |
| { |
| e = e || window.event; |
| var target = e.target || e.srcElement; |
| if (!target) { |
| return; |
| } |
| if (hasClass(target, 'pika-select-month')) { |
| self.gotoMonth(target.value); |
| } |
| else if (hasClass(target, 'pika-select-year')) { |
| self.gotoYear(target.value); |
| } |
| }; |
| |
| self._onInputChange = function(e) |
| { |
| var date; |
| |
| if (e.firedBy === self) { |
| return; |
| } |
| if (hasMoment) { |
| date = moment(opts.field.value, opts.format); |
| date = (date && date.isValid()) ? date.toDate() : null; |
| } |
| else { |
| date = new Date(Date.parse(opts.field.value)); |
| } |
| if (isDate(date)) { |
| self.setDate(date); |
| } |
| if (!self._v) { |
| self.show(); |
| } |
| }; |
| |
| self._onInputFocus = function() |
| { |
| self.show(); |
| }; |
| |
| self._onInputClick = function() |
| { |
| self.show(); |
| }; |
| |
| self._onInputBlur = function() |
| { |
| // IE allows pika div to gain focus; catch blur the input field |
| var pEl = document.activeElement; |
| do { |
| if (hasClass(pEl, 'pika-single')) { |
| return; |
| } |
| } |
| while ((pEl = pEl.parentNode)); |
| |
| if (!self._c) { |
| self._b = sto(function() { |
| self.hide(); |
| }, 50); |
| } |
| self._c = false; |
| }; |
| |
| self._onClick = function(e) |
| { |
| e = e || window.event; |
| var target = e.target || e.srcElement, |
| pEl = target; |
| if (!target) { |
| return; |
| } |
| if (!hasEventListeners && hasClass(target, 'pika-select')) { |
| if (!target.onchange) { |
| target.setAttribute('onchange', 'return;'); |
| addEvent(target, 'change', self._onChange); |
| } |
| } |
| do { |
| if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) { |
| return; |
| } |
| } |
| while ((pEl = pEl.parentNode)); |
| if (self._v && target !== opts.trigger && pEl !== opts.trigger) { |
| self.hide(); |
| } |
| }; |
| |
| self.el = document.createElement('div'); |
| self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : ''); |
| |
| addEvent(self.el, 'mousedown', self._onMouseDown, true); |
| addEvent(self.el, 'touchend', self._onMouseDown, true); |
| addEvent(self.el, 'change', self._onChange); |
| |
| if (opts.field) { |
| if (opts.container) { |
| opts.container.appendChild(self.el); |
| } else if (opts.bound) { |
| document.body.appendChild(self.el); |
| } else { |
| opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling); |
| } |
| addEvent(opts.field, 'change', self._onInputChange); |
| |
| if (!opts.defaultDate) { |
| if (hasMoment && opts.field.value) { |
| opts.defaultDate = moment(opts.field.value, opts.format).toDate(); |
| } else { |
| opts.defaultDate = new Date(Date.parse(opts.field.value)); |
| } |
| opts.setDefaultDate = true; |
| } |
| } |
| |
| var defDate = opts.defaultDate; |
| |
| if (isDate(defDate)) { |
| if (opts.setDefaultDate) { |
| self.setDate(defDate, true); |
| } else { |
| self.gotoDate(defDate); |
| } |
| } else { |
| self.gotoDate(new Date()); |
| } |
| |
| if (opts.bound) { |
| this.hide(); |
| self.el.className += ' is-bound'; |
| addEvent(opts.trigger, 'click', self._onInputClick); |
| addEvent(opts.trigger, 'focus', self._onInputFocus); |
| addEvent(opts.trigger, 'blur', self._onInputBlur); |
| } else { |
| this.show(); |
| } |
| }; |
| |
| |
| /** |
| * public Pikaday API |
| */ |
| Pikaday.prototype = { |
| |
| |
| /** |
| * configure functionality |
| */ |
| config: function(options) |
| { |
| if (!this._o) { |
| this._o = extend({}, defaults, true); |
| } |
| |
| var opts = extend(this._o, options, true); |
| |
| opts.isRTL = !!opts.isRTL; |
| |
| opts.field = (opts.field && opts.field.nodeName) ? opts.field : null; |
| |
| opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null; |
| |
| opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field); |
| |
| opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field; |
| |
| opts.disableWeekends = !!opts.disableWeekends; |
| |
| opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null; |
| |
| var nom = parseInt(opts.numberOfMonths, 10) || 1; |
| opts.numberOfMonths = nom > 4 ? 4 : nom; |
| |
| if (!isDate(opts.minDate)) { |
| opts.minDate = false; |
| } |
| if (!isDate(opts.maxDate)) { |
| opts.maxDate = false; |
| } |
| if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) { |
| opts.maxDate = opts.minDate = false; |
| } |
| if (opts.minDate) { |
| this.setMinDate(opts.minDate); |
| } |
| if (opts.maxDate) { |
| this.setMaxDate(opts.maxDate); |
| } |
| |
| if (isArray(opts.yearRange)) { |
| var fallback = new Date().getFullYear() - 10; |
| opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback; |
| opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback; |
| } else { |
| opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange; |
| if (opts.yearRange > 100) { |
| opts.yearRange = 100; |
| } |
| } |
| |
| return opts; |
| }, |
| |
| /** |
| * return a formatted string of the current selection (using Moment.js if available) |
| */ |
| toString: function(format) |
| { |
| return !isDate(this._d) ? '' : hasMoment ? moment(this._d).format(format || this._o.format) : this._d.toDateString(); |
| }, |
| |
| /** |
| * return a Moment.js object of the current selection (if available) |
| */ |
| getMoment: function() |
| { |
| return hasMoment ? moment(this._d) : null; |
| }, |
| |
| /** |
| * set the current selection from a Moment.js object (if available) |
| */ |
| setMoment: function(date, preventOnSelect) |
| { |
| if (hasMoment && moment.isMoment(date)) { |
| this.setDate(date.toDate(), preventOnSelect); |
| } |
| }, |
| |
| /** |
| * return a Date object of the current selection |
| */ |
| getDate: function() |
| { |
| return isDate(this._d) ? new Date(this._d.getTime()) : null; |
| }, |
| |
| /** |
| * set the current selection |
| */ |
| setDate: function(date, preventOnSelect) |
| { |
| if (!date) { |
| this._d = null; |
| |
| if (this._o.field) { |
| this._o.field.value = ''; |
| fireEvent(this._o.field, 'change', { firedBy: this }); |
| } |
| |
| return this.draw(); |
| } |
| if (typeof date === 'string') { |
| date = new Date(Date.parse(date)); |
| } |
| if (!isDate(date)) { |
| return; |
| } |
| |
| var min = this._o.minDate, |
| max = this._o.maxDate; |
| |
| if (isDate(min) && date < min) { |
| date = min; |
| } else if (isDate(max) && date > max) { |
| date = max; |
| } |
| |
| this._d = new Date(date.getTime()); |
| setToStartOfDay(this._d); |
| this.gotoDate(this._d); |
| |
| if (this._o.field) { |
| this._o.field.value = this.toString(); |
| fireEvent(this._o.field, 'change', { firedBy: this }); |
| } |
| if (!preventOnSelect && typeof this._o.onSelect === 'function') { |
| this._o.onSelect.call(this, this.getDate()); |
| } |
| }, |
| |
| /** |
| * change view to a specific date |
| */ |
| gotoDate: function(date) |
| { |
| var newCalendar = true; |
| |
| if (!isDate(date)) { |
| return; |
| } |
| |
| if (this.calendars) { |
| var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1), |
| lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1), |
| visibleDate = date.getTime(); |
| // get the end of the month |
| lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1); |
| lastVisibleDate.setDate(lastVisibleDate.getDate()-1); |
| newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate); |
| } |
| |
| if (newCalendar) { |
| this.calendars = [{ |
| month: date.getMonth(), |
| year: date.getFullYear() |
| }]; |
| if (this._o.mainCalendar === 'right') { |
| this.calendars[0].month += 1 - this._o.numberOfMonths; |
| } |
| } |
| |
| this.adjustCalendars(); |
| }, |
| |
| adjustCalendars: function() { |
| this.calendars[0] = adjustCalendar(this.calendars[0]); |
| for (var c = 1; c < this._o.numberOfMonths; c++) { |
| this.calendars[c] = adjustCalendar({ |
| month: this.calendars[0].month + c, |
| year: this.calendars[0].year |
| }); |
| } |
| this.draw(); |
| }, |
| |
| gotoToday: function() |
| { |
| this.gotoDate(new Date()); |
| }, |
| |
| /** |
| * change view to a specific month (zero-index, e.g. 0: January) |
| */ |
| gotoMonth: function(month) |
| { |
| if (!isNaN(month)) { |
| this.calendars[0].month = parseInt(month, 10); |
| this.adjustCalendars(); |
| } |
| }, |
| |
| nextMonth: function() |
| { |
| this.calendars[0].month++; |
| this.adjustCalendars(); |
| }, |
| |
| prevMonth: function() |
| { |
| this.calendars[0].month--; |
| this.adjustCalendars(); |
| }, |
| |
| /** |
| * change view to a specific full year (e.g. "2012") |
| */ |
| gotoYear: function(year) |
| { |
| if (!isNaN(year)) { |
| this.calendars[0].year = parseInt(year, 10); |
| this.adjustCalendars(); |
| } |
| }, |
| |
| /** |
| * change the minDate |
| */ |
| setMinDate: function(value) |
| { |
| setToStartOfDay(value); |
| this._o.minDate = value; |
| this._o.minYear = value.getFullYear(); |
| this._o.minMonth = value.getMonth(); |
| this.draw(); |
| }, |
| |
| /** |
| * change the maxDate |
| */ |
| setMaxDate: function(value) |
| { |
| setToStartOfDay(value); |
| this._o.maxDate = value; |
| this._o.maxYear = value.getFullYear(); |
| this._o.maxMonth = value.getMonth(); |
| this.draw(); |
| }, |
| |
| setStartRange: function(value) |
| { |
| this._o.startRange = value; |
| }, |
| |
| setEndRange: function(value) |
| { |
| this._o.endRange = value; |
| }, |
| |
| /** |
| * refresh the HTML |
| */ |
| draw: function(force) |
| { |
| if (!this._v && !force) { |
| return; |
| } |
| var opts = this._o, |
| minYear = opts.minYear, |
| maxYear = opts.maxYear, |
| minMonth = opts.minMonth, |
| maxMonth = opts.maxMonth, |
| html = ''; |
| |
| if (this._y <= minYear) { |
| this._y = minYear; |
| if (!isNaN(minMonth) && this._m < minMonth) { |
| this._m = minMonth; |
| } |
| } |
| if (this._y >= maxYear) { |
| this._y = maxYear; |
| if (!isNaN(maxMonth) && this._m > maxMonth) { |
| this._m = maxMonth; |
| } |
| } |
| |
| for (var c = 0; c < opts.numberOfMonths; c++) { |
| html += '<div class="pika-lendar">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year) + this.render(this.calendars[c].year, this.calendars[c].month) + '</div>'; |
| } |
| |
| this.el.innerHTML = html; |
| |
| if (opts.bound) { |
| if(opts.field.type !== 'hidden') { |
| sto(function() { |
| opts.trigger.focus(); |
| }, 1); |
| } |
| } |
| |
| if (typeof this._o.onDraw === 'function') { |
| var self = this; |
| sto(function() { |
| self._o.onDraw.call(self); |
| }, 0); |
| } |
| }, |
| |
| adjustPosition: function() |
| { |
| var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect; |
| |
| if (this._o.container) return; |
| |
| this.el.style.position = 'absolute'; |
| |
| field = this._o.trigger; |
| pEl = field; |
| width = this.el.offsetWidth; |
| height = this.el.offsetHeight; |
| viewportWidth = window.innerWidth || document.documentElement.clientWidth; |
| viewportHeight = window.innerHeight || document.documentElement.clientHeight; |
| scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop; |
| |
| if (typeof field.getBoundingClientRect === 'function') { |
| clientRect = field.getBoundingClientRect(); |
| left = clientRect.left + window.pageXOffset; |
| top = clientRect.bottom + window.pageYOffset; |
| } else { |
| left = pEl.offsetLeft; |
| top = pEl.offsetTop + pEl.offsetHeight; |
| while((pEl = pEl.offsetParent)) { |
| left += pEl.offsetLeft; |
| top += pEl.offsetTop; |
| } |
| } |
| |
| // default position is bottom & left |
| if ((this._o.reposition && left + width > viewportWidth) || |
| ( |
| this._o.position.indexOf('right') > -1 && |
| left - width + field.offsetWidth > 0 |
| ) |
| ) { |
| left = left - width + field.offsetWidth; |
| } |
| if ((this._o.reposition && top + height > viewportHeight + scrollTop) || |
| ( |
| this._o.position.indexOf('top') > -1 && |
| top - height - field.offsetHeight > 0 |
| ) |
| ) { |
| top = top - height - field.offsetHeight; |
| } |
| |
| this.el.style.left = left + 'px'; |
| this.el.style.top = top + 'px'; |
| }, |
| |
| /** |
| * render HTML for a particular month |
| */ |
| render: function(year, month) |
| { |
| var opts = this._o, |
| now = new Date(), |
| days = getDaysInMonth(year, month), |
| before = new Date(year, month, 1).getDay(), |
| data = [], |
| row = []; |
| setToStartOfDay(now); |
| if (opts.firstDay > 0) { |
| before -= opts.firstDay; |
| if (before < 0) { |
| before += 7; |
| } |
| } |
| var cells = days + before, |
| after = cells; |
| while(after > 7) { |
| after -= 7; |
| } |
| cells += 7 - after; |
| for (var i = 0, r = 0; i < cells; i++) |
| { |
| var day = new Date(year, month, 1 + (i - before)), |
| isSelected = isDate(this._d) ? compareDates(day, this._d) : false, |
| isToday = compareDates(day, now), |
| isEmpty = i < before || i >= (days + before), |
| isStartRange = opts.startRange && compareDates(opts.startRange, day), |
| isEndRange = opts.endRange && compareDates(opts.endRange, day), |
| isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange, |
| isDisabled = (opts.minDate && day < opts.minDate) || |
| (opts.maxDate && day > opts.maxDate) || |
| (opts.disableWeekends && isWeekend(day)) || |
| (opts.disableDayFn && opts.disableDayFn(day)), |
| dayConfig = { |
| day: 1 + (i - before), |
| month: month, |
| year: year, |
| isSelected: isSelected, |
| isToday: isToday, |
| isDisabled: isDisabled, |
| isEmpty: isEmpty, |
| isStartRange: isStartRange, |
| isEndRange: isEndRange, |
| isInRange: isInRange |
| }; |
| |
| row.push(renderDay(dayConfig)); |
| |
| if (++r === 7) { |
| if (opts.showWeekNumber) { |
| row.unshift(renderWeek(i - before, month, year)); |
| } |
| data.push(renderRow(row, opts.isRTL)); |
| row = []; |
| r = 0; |
| } |
| } |
| return renderTable(opts, data); |
| }, |
| |
| isVisible: function() |
| { |
| return this._v; |
| }, |
| |
| show: function() |
| { |
| if (!this._v) { |
| removeClass(this.el, 'is-hidden'); |
| this._v = true; |
| this.draw(); |
| if (this._o.bound) { |
| addEvent(document, 'click', this._onClick); |
| this.adjustPosition(); |
| } |
| if (typeof this._o.onOpen === 'function') { |
| this._o.onOpen.call(this); |
| } |
| } |
| }, |
| |
| hide: function() |
| { |
| var v = this._v; |
| if (v !== false) { |
| if (this._o.bound) { |
| removeEvent(document, 'click', this._onClick); |
| } |
| this.el.style.position = 'static'; // reset |
| this.el.style.left = 'auto'; |
| this.el.style.top = 'auto'; |
| addClass(this.el, 'is-hidden'); |
| this._v = false; |
| if (v !== undefined && typeof this._o.onClose === 'function') { |
| this._o.onClose.call(this); |
| } |
| } |
| }, |
| |
| /** |
| * GAME OVER |
| */ |
| destroy: function() |
| { |
| this.hide(); |
| removeEvent(this.el, 'mousedown', this._onMouseDown, true); |
| removeEvent(this.el, 'touchend', this._onMouseDown, true); |
| removeEvent(this.el, 'change', this._onChange); |
| if (this._o.field) { |
| removeEvent(this._o.field, 'change', this._onInputChange); |
| if (this._o.bound) { |
| removeEvent(this._o.trigger, 'click', this._onInputClick); |
| removeEvent(this._o.trigger, 'focus', this._onInputFocus); |
| removeEvent(this._o.trigger, 'blur', this._onInputBlur); |
| } |
| } |
| if (this.el.parentNode) { |
| this.el.parentNode.removeChild(this.el); |
| } |
| } |
| |
| }; |
| |
| return Pikaday; |
| |
| })); |
| |
| },{"moment":"moment"}],"zeroclipboard":[function(_dereq_,module,exports){ |
| /*! |
| * ZeroClipboard |
| * The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface. |
| * Copyright (c) 2009-2014 Jon Rohan, James M. Greene |
| * Licensed MIT |
| * http://zeroclipboard.org/ |
| * v2.2.0 |
| */ |
| (function(window, undefined) { |
| "use strict"; |
| /** |
| * Store references to critically important global functions that may be |
| * overridden on certain web pages. |
| */ |
| var _window = window, _document = _window.document, _navigator = _window.navigator, _setTimeout = _window.setTimeout, _clearTimeout = _window.clearTimeout, _setInterval = _window.setInterval, _clearInterval = _window.clearInterval, _getComputedStyle = _window.getComputedStyle, _encodeURIComponent = _window.encodeURIComponent, _ActiveXObject = _window.ActiveXObject, _Error = _window.Error, _parseInt = _window.Number.parseInt || _window.parseInt, _parseFloat = _window.Number.parseFloat || _window.parseFloat, _isNaN = _window.Number.isNaN || _window.isNaN, _now = _window.Date.now, _keys = _window.Object.keys, _defineProperty = _window.Object.defineProperty, _hasOwn = _window.Object.prototype.hasOwnProperty, _slice = _window.Array.prototype.slice, _unwrap = function() { |
| var unwrapper = function(el) { |
| return el; |
| }; |
| if (typeof _window.wrap === "function" && typeof _window.unwrap === "function") { |
| try { |
| var div = _document.createElement("div"); |
| var unwrappedDiv = _window.unwrap(div); |
| if (div.nodeType === 1 && unwrappedDiv && unwrappedDiv.nodeType === 1) { |
| unwrapper = _window.unwrap; |
| } |
| } catch (e) {} |
| } |
| return unwrapper; |
| }(); |
| /** |
| * Convert an `arguments` object into an Array. |
| * |
| * @returns The arguments as an Array |
| * @private |
| */ |
| var _args = function(argumentsObj) { |
| return _slice.call(argumentsObj, 0); |
| }; |
| /** |
| * Shallow-copy the owned, enumerable properties of one object over to another, similar to jQuery's `$.extend`. |
| * |
| * @returns The target object, augmented |
| * @private |
| */ |
| var _extend = function() { |
| var i, len, arg, prop, src, copy, args = _args(arguments), target = args[0] || {}; |
| for (i = 1, len = args.length; i < len; i++) { |
| if ((arg = args[i]) != null) { |
| for (prop in arg) { |
| if (_hasOwn.call(arg, prop)) { |
| src = target[prop]; |
| copy = arg[prop]; |
| if (target !== copy && copy !== undefined) { |
| target[prop] = copy; |
| } |
| } |
| } |
| } |
| } |
| return target; |
| }; |
| /** |
| * Return a deep copy of the source object or array. |
| * |
| * @returns Object or Array |
| * @private |
| */ |
| var _deepCopy = function(source) { |
| var copy, i, len, prop; |
| if (typeof source !== "object" || source == null || typeof source.nodeType === "number") { |
| copy = source; |
| } else if (typeof source.length === "number") { |
| copy = []; |
| for (i = 0, len = source.length; i < len; i++) { |
| if (_hasOwn.call(source, i)) { |
| copy[i] = _deepCopy(source[i]); |
| } |
| } |
| } else { |
| copy = {}; |
| for (prop in source) { |
| if (_hasOwn.call(source, prop)) { |
| copy[prop] = _deepCopy(source[prop]); |
| } |
| } |
| } |
| return copy; |
| }; |
| /** |
| * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to keep. |
| * The inverse of `_omit`, mostly. The big difference is that these properties do NOT need to be enumerable to |
| * be kept. |
| * |
| * @returns A new filtered object. |
| * @private |
| */ |
| var _pick = function(obj, keys) { |
| var newObj = {}; |
| for (var i = 0, len = keys.length; i < len; i++) { |
| if (keys[i] in obj) { |
| newObj[keys[i]] = obj[keys[i]]; |
| } |
| } |
| return newObj; |
| }; |
| /** |
| * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to omit. |
| * The inverse of `_pick`. |
| * |
| * @returns A new filtered object. |
| * @private |
| */ |
| var _omit = function(obj, keys) { |
| var newObj = {}; |
| for (var prop in obj) { |
| if (keys.indexOf(prop) === -1) { |
| newObj[prop] = obj[prop]; |
| } |
| } |
| return newObj; |
| }; |
| /** |
| * Remove all owned, enumerable properties from an object. |
| * |
| * @returns The original object without its owned, enumerable properties. |
| * @private |
| */ |
| var _deleteOwnProperties = function(obj) { |
| if (obj) { |
| for (var prop in obj) { |
| if (_hasOwn.call(obj, prop)) { |
| delete obj[prop]; |
| } |
| } |
| } |
| return obj; |
| }; |
| /** |
| * Determine if an element is contained within another element. |
| * |
| * @returns Boolean |
| * @private |
| */ |
| var _containedBy = function(el, ancestorEl) { |
| if (el && el.nodeType === 1 && el.ownerDocument && ancestorEl && (ancestorEl.nodeType === 1 && ancestorEl.ownerDocument && ancestorEl.ownerDocument === el.ownerDocument || ancestorEl.nodeType === 9 && !ancestorEl.ownerDocument && ancestorEl === el.ownerDocument)) { |
| do { |
| if (el === ancestorEl) { |
| return true; |
| } |
| el = el.parentNode; |
| } while (el); |
| } |
| return false; |
| }; |
| /** |
| * Get the URL path's parent directory. |
| * |
| * @returns String or `undefined` |
| * @private |
| */ |
| var _getDirPathOfUrl = function(url) { |
| var dir; |
| if (typeof url === "string" && url) { |
| dir = url.split("#")[0].split("?")[0]; |
| dir = url.slice(0, url.lastIndexOf("/") + 1); |
| } |
| return dir; |
| }; |
| /** |
| * Get the current script's URL by throwing an `Error` and analyzing it. |
| * |
| * @returns String or `undefined` |
| * @private |
| */ |
| var _getCurrentScriptUrlFromErrorStack = function(stack) { |
| var url, matches; |
| if (typeof stack === "string" && stack) { |
| matches = stack.match(/^(?:|[^:@]*@|.+\)@(?=http[s]?|file)|.+?\s+(?: at |@)(?:[^:\(]+ )*[\(]?)((?:http[s]?|file):\/\/[\/]?.+?\/[^:\)]*?)(?::\d+)(?::\d+)?/); |
| if (matches && matches[1]) { |
| url = matches[1]; |
| } else { |
| matches = stack.match(/\)@((?:http[s]?|file):\/\/[\/]?.+?\/[^:\)]*?)(?::\d+)(?::\d+)?/); |
| if (matches && matches[1]) { |
| url = matches[1]; |
| } |
| } |
| } |
| return url; |
| }; |
| /** |
| * Get the current script's URL by throwing an `Error` and analyzing it. |
| * |
| * @returns String or `undefined` |
| * @private |
| */ |
| var _getCurrentScriptUrlFromError = function() { |
| var url, err; |
| try { |
| throw new _Error(); |
| } catch (e) { |
| err = e; |
| } |
| if (err) { |
| url = err.sourceURL || err.fileName || _getCurrentScriptUrlFromErrorStack(err.stack); |
| } |
| return url; |
| }; |
| /** |
| * Get the current script's URL. |
| * |
| * @returns String or `undefined` |
| * @private |
| */ |
| var _getCurrentScriptUrl = function() { |
| var jsPath, scripts, i; |
| if (_document.currentScript && (jsPath = _document.currentScript.src)) { |
| return jsPath; |
| } |
| scripts = _document.getElementsByTagName("script"); |
| if (scripts.length === 1) { |
| return scripts[0].src || undefined; |
| } |
| if ("readyState" in scripts[0]) { |
| for (i = scripts.length; i--; ) { |
| if (scripts[i].readyState === "interactive" && (jsPath = scripts[i].src)) { |
| return jsPath; |
| } |
| } |
| } |
| if (_document.readyState === "loading" && (jsPath = scripts[scripts.length - 1].src)) { |
| return jsPath; |
| } |
| if (jsPath = _getCurrentScriptUrlFromError()) { |
| return jsPath; |
| } |
| return undefined; |
| }; |
| /** |
| * Get the unanimous parent directory of ALL script tags. |
| * If any script tags are either (a) inline or (b) from differing parent |
| * directories, this method must return `undefined`. |
| * |
| * @returns String or `undefined` |
| * @private |
| */ |
| var _getUnanimousScriptParentDir = function() { |
| var i, jsDir, jsPath, scripts = _document.getElementsByTagName("script"); |
| for (i = scripts.length; i--; ) { |
| if (!(jsPath = scripts[i].src)) { |
| jsDir = null; |
| break; |
| } |
| jsPath = _getDirPathOfUrl(jsPath); |
| if (jsDir == null) { |
| jsDir = jsPath; |
| } else if (jsDir !== jsPath) { |
| jsDir = null; |
| break; |
| } |
| } |
| return jsDir || undefined; |
| }; |
| /** |
| * Get the presumed location of the "ZeroClipboard.swf" file, based on the location |
| * of the executing JavaScript file (e.g. "ZeroClipboard.js", etc.). |
| * |
| * @returns String |
| * @private |
| */ |
| var _getDefaultSwfPath = function() { |
| var jsDir = _getDirPathOfUrl(_getCurrentScriptUrl()) || _getUnanimousScriptParentDir() || ""; |
| return jsDir + "ZeroClipboard.swf"; |
| }; |
| /** |
| * Keep track of if the page is framed (in an `iframe`). This can never change. |
| * @private |
| */ |
| var _pageIsFramed = function() { |
| return window.opener == null && (!!window.top && window != window.top || !!window.parent && window != window.parent); |
| }(); |
| /** |
| * Keep track of the state of the Flash object. |
| * @private |
| */ |
| var _flashState = { |
| bridge: null, |
| version: "0.0.0", |
| pluginType: "unknown", |
| disabled: null, |
| outdated: null, |
| sandboxed: null, |
| unavailable: null, |
| degraded: null, |
| deactivated: null, |
| overdue: null, |
| ready: null |
| }; |
| /** |
| * The minimum Flash Player version required to use ZeroClipboard completely. |
| * @readonly |
| * @private |
| */ |
| var _minimumFlashVersion = "11.0.0"; |
| /** |
| * The ZeroClipboard library version number, as reported by Flash, at the time the SWF was compiled. |
| */ |
| var _zcSwfVersion; |
| /** |
| * Keep track of all event listener registrations. |
| * @private |
| */ |
| var _handlers = {}; |
| /** |
| * Keep track of the currently activated element. |
| * @private |
| */ |
| var _currentElement; |
| /** |
| * Keep track of the element that was activated when a `copy` process started. |
| * @private |
| */ |
| var _copyTarget; |
| /** |
| * Keep track of data for the pending clipboard transaction. |
| * @private |
| */ |
| var _clipData = {}; |
| /** |
| * Keep track of data formats for the pending clipboard transaction. |
| * @private |
| */ |
| var _clipDataFormatMap = null; |
| /** |
| * Keep track of the Flash availability check timeout. |
| * @private |
| */ |
| var _flashCheckTimeout = 0; |
| /** |
| * Keep track of SWF network errors interval polling. |
| * @private |
| */ |
| var _swfFallbackCheckInterval = 0; |
| /** |
| * The `message` store for events |
| * @private |
| */ |
| var _eventMessages = { |
| ready: "Flash communication is established", |
| error: { |
| "flash-disabled": "Flash is disabled or not installed. May also be attempting to run Flash in a sandboxed iframe, which is impossible.", |
| "flash-outdated": "Flash is too outdated to support ZeroClipboard", |
| "flash-sandboxed": "Attempting to run Flash in a sandboxed iframe, which is impossible", |
| "flash-unavailable": "Flash is unable to communicate bidirectionally with JavaScript", |
| "flash-degraded": "Flash is unable to preserve data fidelity when communicating with JavaScript", |
| "flash-deactivated": "Flash is too outdated for your browser and/or is configured as click-to-activate.\nThis may also mean that the ZeroClipboard SWF object could not be loaded, so please check your `swfPath` configuration and/or network connectivity.\nMay also be attempting to run Flash in a sandboxed iframe, which is impossible.", |
| "flash-overdue": "Flash communication was established but NOT within the acceptable time limit", |
| "version-mismatch": "ZeroClipboard JS version number does not match ZeroClipboard SWF version number", |
| "clipboard-error": "At least one error was thrown while ZeroClipboard was attempting to inject your data into the clipboard", |
| "config-mismatch": "ZeroClipboard configuration does not match Flash's reality", |
| "swf-not-found": "The ZeroClipboard SWF object could not be loaded, so please check your `swfPath` configuration and/or network connectivity" |
| } |
| }; |
| /** |
| * The `name`s of `error` events that can only occur is Flash has at least |
| * been able to load the SWF successfully. |
| * @private |
| */ |
| var _errorsThatOnlyOccurAfterFlashLoads = [ "flash-unavailable", "flash-degraded", "flash-overdue", "version-mismatch", "config-mismatch", "clipboard-error" ]; |
| /** |
| * The `name`s of `error` events that should likely result in the `_flashState` |
| * variable's property values being updated. |
| * @private |
| */ |
| var _flashStateErrorNames = [ "flash-disabled", "flash-outdated", "flash-sandboxed", "flash-unavailable", "flash-degraded", "flash-deactivated", "flash-overdue" ]; |
| /** |
| * A RegExp to match the `name` property of `error` events related to Flash. |
| * @private |
| */ |
| var _flashStateErrorNameMatchingRegex = new RegExp("^flash-(" + _flashStateErrorNames.map(function(errorName) { |
| return errorName.replace(/^flash-/, ""); |
| }).join("|") + ")$"); |
| /** |
| * A RegExp to match the `name` property of `error` events related to Flash, |
| * which is enabled. |
| * @private |
| */ |
| var _flashStateEnabledErrorNameMatchingRegex = new RegExp("^flash-(" + _flashStateErrorNames.slice(1).map(function(errorName) { |
| return errorName.replace(/^flash-/, ""); |
| }).join("|") + ")$"); |
| /** |
| * ZeroClipboard configuration defaults for the Core module. |
| * @private |
| */ |
| var _globalConfig = { |
| swfPath: _getDefaultSwfPath(), |
| trustedDomains: window.location.host ? [ window.location.host ] : [], |
| cacheBust: true, |
| forceEnhancedClipboard: false, |
| flashLoadTimeout: 3e4, |
| autoActivate: true, |
| bubbleEvents: true, |
| containerId: "global-zeroclipboard-html-bridge", |
| containerClass: "global-zeroclipboard-container", |
| swfObjectId: "global-zeroclipboard-flash-bridge", |
| hoverClass: "zeroclipboard-is-hover", |
| activeClass: "zeroclipboard-is-active", |
| forceHandCursor: false, |
| title: null, |
| zIndex: 999999999 |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.config`. |
| * @private |
| */ |
| var _config = function(options) { |
| if (typeof options === "object" && options !== null) { |
| for (var prop in options) { |
| if (_hasOwn.call(options, prop)) { |
| if (/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(prop)) { |
| _globalConfig[prop] = options[prop]; |
| } else if (_flashState.bridge == null) { |
| if (prop === "containerId" || prop === "swfObjectId") { |
| if (_isValidHtml4Id(options[prop])) { |
| _globalConfig[prop] = options[prop]; |
| } else { |
| throw new Error("The specified `" + prop + "` value is not valid as an HTML4 Element ID"); |
| } |
| } else { |
| _globalConfig[prop] = options[prop]; |
| } |
| } |
| } |
| } |
| } |
| if (typeof options === "string" && options) { |
| if (_hasOwn.call(_globalConfig, options)) { |
| return _globalConfig[options]; |
| } |
| return; |
| } |
| return _deepCopy(_globalConfig); |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.state`. |
| * @private |
| */ |
| var _state = function() { |
| _detectSandbox(); |
| return { |
| browser: _pick(_navigator, [ "userAgent", "platform", "appName" ]), |
| flash: _omit(_flashState, [ "bridge" ]), |
| zeroclipboard: { |
| version: ZeroClipboard.version, |
| config: ZeroClipboard.config() |
| } |
| }; |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.isFlashUnusable`. |
| * @private |
| */ |
| var _isFlashUnusable = function() { |
| return !!(_flashState.disabled || _flashState.outdated || _flashState.sandboxed || _flashState.unavailable || _flashState.degraded || _flashState.deactivated); |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.on`. |
| * @private |
| */ |
| var _on = function(eventType, listener) { |
| var i, len, events, added = {}; |
| if (typeof eventType === "string" && eventType) { |
| events = eventType.toLowerCase().split(/\s+/); |
| } else if (typeof eventType === "object" && eventType && typeof listener === "undefined") { |
| for (i in eventType) { |
| if (_hasOwn.call(eventType, i) && typeof i === "string" && i && typeof eventType[i] === "function") { |
| ZeroClipboard.on(i, eventType[i]); |
| } |
| } |
| } |
| if (events && events.length) { |
| for (i = 0, len = events.length; i < len; i++) { |
| eventType = events[i].replace(/^on/, ""); |
| added[eventType] = true; |
| if (!_handlers[eventType]) { |
| _handlers[eventType] = []; |
| } |
| _handlers[eventType].push(listener); |
| } |
| if (added.ready && _flashState.ready) { |
| ZeroClipboard.emit({ |
| type: "ready" |
| }); |
| } |
| if (added.error) { |
| for (i = 0, len = _flashStateErrorNames.length; i < len; i++) { |
| if (_flashState[_flashStateErrorNames[i].replace(/^flash-/, "")] === true) { |
| ZeroClipboard.emit({ |
| type: "error", |
| name: _flashStateErrorNames[i] |
| }); |
| break; |
| } |
| } |
| if (_zcSwfVersion !== undefined && ZeroClipboard.version !== _zcSwfVersion) { |
| ZeroClipboard.emit({ |
| type: "error", |
| name: "version-mismatch", |
| jsVersion: ZeroClipboard.version, |
| swfVersion: _zcSwfVersion |
| }); |
| } |
| } |
| } |
| return ZeroClipboard; |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.off`. |
| * @private |
| */ |
| var _off = function(eventType, listener) { |
| var i, len, foundIndex, events, perEventHandlers; |
| if (arguments.length === 0) { |
| events = _keys(_handlers); |
| } else if (typeof eventType === "string" && eventType) { |
| events = eventType.split(/\s+/); |
| } else if (typeof eventType === "object" && eventType && typeof listener === "undefined") { |
| for (i in eventType) { |
| if (_hasOwn.call(eventType, i) && typeof i === "string" && i && typeof eventType[i] === "function") { |
| ZeroClipboard.off(i, eventType[i]); |
| } |
| } |
| } |
| if (events && events.length) { |
| for (i = 0, len = events.length; i < len; i++) { |
| eventType = events[i].toLowerCase().replace(/^on/, ""); |
| perEventHandlers = _handlers[eventType]; |
| if (perEventHandlers && perEventHandlers.length) { |
| if (listener) { |
| foundIndex = perEventHandlers.indexOf(listener); |
| while (foundIndex !== -1) { |
| perEventHandlers.splice(foundIndex, 1); |
| foundIndex = perEventHandlers.indexOf(listener, foundIndex); |
| } |
| } else { |
| perEventHandlers.length = 0; |
| } |
| } |
| } |
| } |
| return ZeroClipboard; |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.handlers`. |
| * @private |
| */ |
| var _listeners = function(eventType) { |
| var copy; |
| if (typeof eventType === "string" && eventType) { |
| copy = _deepCopy(_handlers[eventType]) || null; |
| } else { |
| copy = _deepCopy(_handlers); |
| } |
| return copy; |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.emit`. |
| * @private |
| */ |
| var _emit = function(event) { |
| var eventCopy, returnVal, tmp; |
| event = _createEvent(event); |
| if (!event) { |
| return; |
| } |
| if (_preprocessEvent(event)) { |
| return; |
| } |
| if (event.type === "ready" && _flashState.overdue === true) { |
| return ZeroClipboard.emit({ |
| type: "error", |
| name: "flash-overdue" |
| }); |
| } |
| eventCopy = _extend({}, event); |
| _dispatchCallbacks.call(this, eventCopy); |
| if (event.type === "copy") { |
| tmp = _mapClipDataToFlash(_clipData); |
| returnVal = tmp.data; |
| _clipDataFormatMap = tmp.formatMap; |
| } |
| return returnVal; |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.create`. |
| * @private |
| */ |
| var _create = function() { |
| var previousState = _flashState.sandboxed; |
| _detectSandbox(); |
| if (typeof _flashState.ready !== "boolean") { |
| _flashState.ready = false; |
| } |
| if (_flashState.sandboxed !== previousState && _flashState.sandboxed === true) { |
| _flashState.ready = false; |
| ZeroClipboard.emit({ |
| type: "error", |
| name: "flash-sandboxed" |
| }); |
| } else if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) { |
| var maxWait = _globalConfig.flashLoadTimeout; |
| if (typeof maxWait === "number" && maxWait >= 0) { |
| _flashCheckTimeout = _setTimeout(function() { |
| if (typeof _flashState.deactivated !== "boolean") { |
| _flashState.deactivated = true; |
| } |
| if (_flashState.deactivated === true) { |
| ZeroClipboard.emit({ |
| type: "error", |
| name: "flash-deactivated" |
| }); |
| } |
| }, maxWait); |
| } |
| _flashState.overdue = false; |
| _embedSwf(); |
| } |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.destroy`. |
| * @private |
| */ |
| var _destroy = function() { |
| ZeroClipboard.clearData(); |
| ZeroClipboard.blur(); |
| ZeroClipboard.emit("destroy"); |
| _unembedSwf(); |
| ZeroClipboard.off(); |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.setData`. |
| * @private |
| */ |
| var _setData = function(format, data) { |
| var dataObj; |
| if (typeof format === "object" && format && typeof data === "undefined") { |
| dataObj = format; |
| ZeroClipboard.clearData(); |
| } else if (typeof format === "string" && format) { |
| dataObj = {}; |
| dataObj[format] = data; |
| } else { |
| return; |
| } |
| for (var dataFormat in dataObj) { |
| if (typeof dataFormat === "string" && dataFormat && _hasOwn.call(dataObj, dataFormat) && typeof dataObj[dataFormat] === "string" && dataObj[dataFormat]) { |
| _clipData[dataFormat] = dataObj[dataFormat]; |
| } |
| } |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.clearData`. |
| * @private |
| */ |
| var _clearData = function(format) { |
| if (typeof format === "undefined") { |
| _deleteOwnProperties(_clipData); |
| _clipDataFormatMap = null; |
| } else if (typeof format === "string" && _hasOwn.call(_clipData, format)) { |
| delete _clipData[format]; |
| } |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.getData`. |
| * @private |
| */ |
| var _getData = function(format) { |
| if (typeof format === "undefined") { |
| return _deepCopy(_clipData); |
| } else if (typeof format === "string" && _hasOwn.call(_clipData, format)) { |
| return _clipData[format]; |
| } |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.focus`/`ZeroClipboard.activate`. |
| * @private |
| */ |
| var _focus = function(element) { |
| if (!(element && element.nodeType === 1)) { |
| return; |
| } |
| if (_currentElement) { |
| _removeClass(_currentElement, _globalConfig.activeClass); |
| if (_currentElement !== element) { |
| _removeClass(_currentElement, _globalConfig.hoverClass); |
| } |
| } |
| _currentElement = element; |
| _addClass(element, _globalConfig.hoverClass); |
| var newTitle = element.getAttribute("title") || _globalConfig.title; |
| if (typeof newTitle === "string" && newTitle) { |
| var htmlBridge = _getHtmlBridge(_flashState.bridge); |
| if (htmlBridge) { |
| htmlBridge.setAttribute("title", newTitle); |
| } |
| } |
| var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, "cursor") === "pointer"; |
| _setHandCursor(useHandCursor); |
| _reposition(); |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.blur`/`ZeroClipboard.deactivate`. |
| * @private |
| */ |
| var _blur = function() { |
| var htmlBridge = _getHtmlBridge(_flashState.bridge); |
| if (htmlBridge) { |
| htmlBridge.removeAttribute("title"); |
| htmlBridge.style.left = "0px"; |
| htmlBridge.style.top = "-9999px"; |
| htmlBridge.style.width = "1px"; |
| htmlBridge.style.height = "1px"; |
| } |
| if (_currentElement) { |
| _removeClass(_currentElement, _globalConfig.hoverClass); |
| _removeClass(_currentElement, _globalConfig.activeClass); |
| _currentElement = null; |
| } |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.activeElement`. |
| * @private |
| */ |
| var _activeElement = function() { |
| return _currentElement || null; |
| }; |
| /** |
| * Check if a value is a valid HTML4 `ID` or `Name` token. |
| * @private |
| */ |
| var _isValidHtml4Id = function(id) { |
| return typeof id === "string" && id && /^[A-Za-z][A-Za-z0-9_:\-\.]*$/.test(id); |
| }; |
| /** |
| * Create or update an `event` object, based on the `eventType`. |
| * @private |
| */ |
| var _createEvent = function(event) { |
| var eventType; |
| if (typeof event === "string" && event) { |
| eventType = event; |
| event = {}; |
| } else if (typeof event === "object" && event && typeof event.type === "string" && event.type) { |
| eventType = event.type; |
| } |
| if (!eventType) { |
| return; |
| } |
| eventType = eventType.toLowerCase(); |
| if (!event.target && (/^(copy|aftercopy|_click)$/.test(eventType) || eventType === "error" && event.name === "clipboard-error")) { |
| event.target = _copyTarget; |
| } |
| _extend(event, { |
| type: eventType, |
| target: event.target || _currentElement || null, |
| relatedTarget: event.relatedTarget || null, |
| currentTarget: _flashState && _flashState.bridge || null, |
| timeStamp: event.timeStamp || _now() || null |
| }); |
| var msg = _eventMessages[event.type]; |
| if (event.type === "error" && event.name && msg) { |
| msg = msg[event.name]; |
| } |
| if (msg) { |
| event.message = msg; |
| } |
| if (event.type === "ready") { |
| _extend(event, { |
| target: null, |
| version: _flashState.version |
| }); |
| } |
| if (event.type === "error") { |
| if (_flashStateErrorNameMatchingRegex.test(event.name)) { |
| _extend(event, { |
| target: null, |
| minimumVersion: _minimumFlashVersion |
| }); |
| } |
| if (_flashStateEnabledErrorNameMatchingRegex.test(event.name)) { |
| _extend(event, { |
| version: _flashState.version |
| }); |
| } |
| } |
| if (event.type === "copy") { |
| event.clipboardData = { |
| setData: ZeroClipboard.setData, |
| clearData: ZeroClipboard.clearData |
| }; |
| } |
| if (event.type === "aftercopy") { |
| event = _mapClipResultsFromFlash(event, _clipDataFormatMap); |
| } |
| if (event.target && !event.relatedTarget) { |
| event.relatedTarget = _getRelatedTarget(event.target); |
| } |
| return _addMouseData(event); |
| }; |
| /** |
| * Get a relatedTarget from the target's `data-clipboard-target` attribute |
| * @private |
| */ |
| var _getRelatedTarget = function(targetEl) { |
| var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute("data-clipboard-target"); |
| return relatedTargetId ? _document.getElementById(relatedTargetId) : null; |
| }; |
| /** |
| * Add element and position data to `MouseEvent` instances |
| * @private |
| */ |
| var _addMouseData = function(event) { |
| if (event && /^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) { |
| var srcElement = event.target; |
| var fromElement = event.type === "_mouseover" && event.relatedTarget ? event.relatedTarget : undefined; |
| var toElement = event.type === "_mouseout" && event.relatedTarget ? event.relatedTarget : undefined; |
| var pos = _getElementPosition(srcElement); |
| var screenLeft = _window.screenLeft || _window.screenX || 0; |
| var screenTop = _window.screenTop || _window.screenY || 0; |
| var scrollLeft = _document.body.scrollLeft + _document.documentElement.scrollLeft; |
| var scrollTop = _document.body.scrollTop + _document.documentElement.scrollTop; |
| var pageX = pos.left + (typeof event._stageX === "number" ? event._stageX : 0); |
| var pageY = pos.top + (typeof event._stageY === "number" ? event._stageY : 0); |
| var clientX = pageX - scrollLeft; |
| var clientY = pageY - scrollTop; |
| var screenX = screenLeft + clientX; |
| var screenY = screenTop + clientY; |
| var moveX = typeof event.movementX === "number" ? event.movementX : 0; |
| var moveY = typeof event.movementY === "number" ? event.movementY : 0; |
| delete event._stageX; |
| delete event._stageY; |
| _extend(event, { |
| srcElement: srcElement, |
| fromElement: fromElement, |
| toElement: toElement, |
| screenX: screenX, |
| screenY: screenY, |
| pageX: pageX, |
| pageY: pageY, |
| clientX: clientX, |
| clientY: clientY, |
| x: clientX, |
| y: clientY, |
| movementX: moveX, |
| movementY: moveY, |
| offsetX: 0, |
| offsetY: 0, |
| layerX: 0, |
| layerY: 0 |
| }); |
| } |
| return event; |
| }; |
| /** |
| * Determine if an event's registered handlers should be execute synchronously or asynchronously. |
| * |
| * @returns {boolean} |
| * @private |
| */ |
| var _shouldPerformAsync = function(event) { |
| var eventType = event && typeof event.type === "string" && event.type || ""; |
| return !/^(?:(?:before)?copy|destroy)$/.test(eventType); |
| }; |
| /** |
| * Control if a callback should be executed asynchronously or not. |
| * |
| * @returns `undefined` |
| * @private |
| */ |
| var _dispatchCallback = function(func, context, args, async) { |
| if (async) { |
| _setTimeout(function() { |
| func.apply(context, args); |
| }, 0); |
| } else { |
| func.apply(context, args); |
| } |
| }; |
| /** |
| * Handle the actual dispatching of events to client instances. |
| * |
| * @returns `undefined` |
| * @private |
| */ |
| var _dispatchCallbacks = function(event) { |
| if (!(typeof event === "object" && event && event.type)) { |
| return; |
| } |
| var async = _shouldPerformAsync(event); |
| var wildcardTypeHandlers = _handlers["*"] || []; |
| var specificTypeHandlers = _handlers[event.type] || []; |
| var handlers = wildcardTypeHandlers.concat(specificTypeHandlers); |
| if (handlers && handlers.length) { |
| var i, len, func, context, eventCopy, originalContext = this; |
| for (i = 0, len = handlers.length; i < len; i++) { |
| func = handlers[i]; |
| context = originalContext; |
| if (typeof func === "string" && typeof _window[func] === "function") { |
| func = _window[func]; |
| } |
| if (typeof func === "object" && func && typeof func.handleEvent === "function") { |
| context = func; |
| func = func.handleEvent; |
| } |
| if (typeof func === "function") { |
| eventCopy = _extend({}, event); |
| _dispatchCallback(func, context, [ eventCopy ], async); |
| } |
| } |
| } |
| return this; |
| }; |
| /** |
| * Check an `error` event's `name` property to see if Flash has |
| * already loaded, which rules out possible `iframe` sandboxing. |
| * @private |
| */ |
| var _getSandboxStatusFromErrorEvent = function(event) { |
| var isSandboxed = null; |
| if (_pageIsFramed === false || event && event.type === "error" && event.name && _errorsThatOnlyOccurAfterFlashLoads.indexOf(event.name) !== -1) { |
| isSandboxed = false; |
| } |
| return isSandboxed; |
| }; |
| /** |
| * Preprocess any special behaviors, reactions, or state changes after receiving this event. |
| * Executes only once per event emitted, NOT once per client. |
| * @private |
| */ |
| var _preprocessEvent = function(event) { |
| var element = event.target || _currentElement || null; |
| var sourceIsSwf = event._source === "swf"; |
| delete event._source; |
| switch (event.type) { |
| case "error": |
| var isSandboxed = event.name === "flash-sandboxed" || _getSandboxStatusFromErrorEvent(event); |
| if (typeof isSandboxed === "boolean") { |
| _flashState.sandboxed = isSandboxed; |
| } |
| if (_flashStateErrorNames.indexOf(event.name) !== -1) { |
| _extend(_flashState, { |
| disabled: event.name === "flash-disabled", |
| outdated: event.name === "flash-outdated", |
| unavailable: event.name === "flash-unavailable", |
| degraded: event.name === "flash-degraded", |
| deactivated: event.name === "flash-deactivated", |
| overdue: event.name === "flash-overdue", |
| ready: false |
| }); |
| } else if (event.name === "version-mismatch") { |
| _zcSwfVersion = event.swfVersion; |
| _extend(_flashState, { |
| disabled: false, |
| outdated: false, |
| unavailable: false, |
| degraded: false, |
| deactivated: false, |
| overdue: false, |
| ready: false |
| }); |
| } |
| _clearTimeoutsAndPolling(); |
| break; |
| |
| case "ready": |
| _zcSwfVersion = event.swfVersion; |
| var wasDeactivated = _flashState.deactivated === true; |
| _extend(_flashState, { |
| disabled: false, |
| outdated: false, |
| sandboxed: false, |
| unavailable: false, |
| degraded: false, |
| deactivated: false, |
| overdue: wasDeactivated, |
| ready: !wasDeactivated |
| }); |
| _clearTimeoutsAndPolling(); |
| break; |
| |
| case "beforecopy": |
| _copyTarget = element; |
| break; |
| |
| case "copy": |
| var textContent, htmlContent, targetEl = event.relatedTarget; |
| if (!(_clipData["text/html"] || _clipData["text/plain"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) { |
| event.clipboardData.clearData(); |
| event.clipboardData.setData("text/plain", textContent); |
| if (htmlContent !== textContent) { |
| event.clipboardData.setData("text/html", htmlContent); |
| } |
| } else if (!_clipData["text/plain"] && event.target && (textContent = event.target.getAttribute("data-clipboard-text"))) { |
| event.clipboardData.clearData(); |
| event.clipboardData.setData("text/plain", textContent); |
| } |
| break; |
| |
| case "aftercopy": |
| _queueEmitClipboardErrors(event); |
| ZeroClipboard.clearData(); |
| if (element && element !== _safeActiveElement() && element.focus) { |
| element.focus(); |
| } |
| break; |
| |
| case "_mouseover": |
| ZeroClipboard.focus(element); |
| if (_globalConfig.bubbleEvents === true && sourceIsSwf) { |
| if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) { |
| _fireMouseEvent(_extend({}, event, { |
| type: "mouseenter", |
| bubbles: false, |
| cancelable: false |
| })); |
| } |
| _fireMouseEvent(_extend({}, event, { |
| type: "mouseover" |
| })); |
| } |
| break; |
| |
| case "_mouseout": |
| ZeroClipboard.blur(); |
| if (_globalConfig.bubbleEvents === true && sourceIsSwf) { |
| if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) { |
| _fireMouseEvent(_extend({}, event, { |
| type: "mouseleave", |
| bubbles: false, |
| cancelable: false |
| })); |
| } |
| _fireMouseEvent(_extend({}, event, { |
| type: "mouseout" |
| })); |
| } |
| break; |
| |
| case "_mousedown": |
| _addClass(element, _globalConfig.activeClass); |
| if (_globalConfig.bubbleEvents === true && sourceIsSwf) { |
| _fireMouseEvent(_extend({}, event, { |
| type: event.type.slice(1) |
| })); |
| } |
| break; |
| |
| case "_mouseup": |
| _removeClass(element, _globalConfig.activeClass); |
| if (_globalConfig.bubbleEvents === true && sourceIsSwf) { |
| _fireMouseEvent(_extend({}, event, { |
| type: event.type.slice(1) |
| })); |
| } |
| break; |
| |
| case "_click": |
| _copyTarget = null; |
| if (_globalConfig.bubbleEvents === true && sourceIsSwf) { |
| _fireMouseEvent(_extend({}, event, { |
| type: event.type.slice(1) |
| })); |
| } |
| break; |
| |
| case "_mousemove": |
| if (_globalConfig.bubbleEvents === true && sourceIsSwf) { |
| _fireMouseEvent(_extend({}, event, { |
| type: event.type.slice(1) |
| })); |
| } |
| break; |
| } |
| if (/^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) { |
| return true; |
| } |
| }; |
| /** |
| * Check an "aftercopy" event for clipboard errors and emit a corresponding "error" event. |
| * @private |
| */ |
| var _queueEmitClipboardErrors = function(aftercopyEvent) { |
| if (aftercopyEvent.errors && aftercopyEvent.errors.length > 0) { |
| var errorEvent = _deepCopy(aftercopyEvent); |
| _extend(errorEvent, { |
| type: "error", |
| name: "clipboard-error" |
| }); |
| delete errorEvent.success; |
| _setTimeout(function() { |
| ZeroClipboard.emit(errorEvent); |
| }, 0); |
| } |
| }; |
| /** |
| * Dispatch a synthetic MouseEvent. |
| * |
| * @returns `undefined` |
| * @private |
| */ |
| var _fireMouseEvent = function(event) { |
| if (!(event && typeof event.type === "string" && event)) { |
| return; |
| } |
| var e, target = event.target || null, doc = target && target.ownerDocument || _document, defaults = { |
| view: doc.defaultView || _window, |
| canBubble: true, |
| cancelable: true, |
| detail: event.type === "click" ? 1 : 0, |
| button: typeof event.which === "number" ? event.which - 1 : typeof event.button === "number" ? event.button : doc.createEvent ? 0 : 1 |
| }, args = _extend(defaults, event); |
| if (!target) { |
| return; |
| } |
| if (doc.createEvent && target.dispatchEvent) { |
| args = [ args.type, args.canBubble, args.cancelable, args.view, args.detail, args.screenX, args.screenY, args.clientX, args.clientY, args.ctrlKey, args.altKey, args.shiftKey, args.metaKey, args.button, args.relatedTarget ]; |
| e = doc.createEvent("MouseEvents"); |
| if (e.initMouseEvent) { |
| e.initMouseEvent.apply(e, args); |
| e._source = "js"; |
| target.dispatchEvent(e); |
| } |
| } |
| }; |
| /** |
| * Continuously poll the DOM until either: |
| * (a) the fallback content becomes visible, or |
| * (b) we receive an event from SWF (handled elsewhere) |
| * |
| * IMPORTANT: |
| * This is NOT a necessary check but it can result in significantly faster |
| * detection of bad `swfPath` configuration and/or network/server issues [in |
| * supported browsers] than waiting for the entire `flashLoadTimeout` duration |
| * to elapse before detecting that the SWF cannot be loaded. The detection |
| * duration can be anywhere from 10-30 times faster [in supported browsers] by |
| * using this approach. |
| * |
| * @returns `undefined` |
| * @private |
| */ |
| var _watchForSwfFallbackContent = function() { |
| var maxWait = _globalConfig.flashLoadTimeout; |
| if (typeof maxWait === "number" && maxWait >= 0) { |
| var pollWait = Math.min(1e3, maxWait / 10); |
| var fallbackContentId = _globalConfig.swfObjectId + "_fallbackContent"; |
| _swfFallbackCheckInterval = _setInterval(function() { |
| var el = _document.getElementById(fallbackContentId); |
| if (_isElementVisible(el)) { |
| _clearTimeoutsAndPolling(); |
| _flashState.deactivated = null; |
| ZeroClipboard.emit({ |
| type: "error", |
| name: "swf-not-found" |
| }); |
| } |
| }, pollWait); |
| } |
| }; |
| /** |
| * Create the HTML bridge element to embed the Flash object into. |
| * @private |
| */ |
| var _createHtmlBridge = function() { |
| var container = _document.createElement("div"); |
| container.id = _globalConfig.containerId; |
| container.className = _globalConfig.containerClass; |
| container.style.position = "absolute"; |
| container.style.left = "0px"; |
| container.style.top = "-9999px"; |
| container.style.width = "1px"; |
| container.style.height = "1px"; |
| container.style.zIndex = "" + _getSafeZIndex(_globalConfig.zIndex); |
| return container; |
| }; |
| /** |
| * Get the HTML element container that wraps the Flash bridge object/element. |
| * @private |
| */ |
| var _getHtmlBridge = function(flashBridge) { |
| var htmlBridge = flashBridge && flashBridge.parentNode; |
| while (htmlBridge && htmlBridge.nodeName === "OBJECT" && htmlBridge.parentNode) { |
| htmlBridge = htmlBridge.parentNode; |
| } |
| return htmlBridge || null; |
| }; |
| /** |
| * Create the SWF object. |
| * |
| * @returns The SWF object reference. |
| * @private |
| */ |
| var _embedSwf = function() { |
| var len, flashBridge = _flashState.bridge, container = _getHtmlBridge(flashBridge); |
| if (!flashBridge) { |
| var allowScriptAccess = _determineScriptAccess(_window.location.host, _globalConfig); |
| var allowNetworking = allowScriptAccess === "never" ? "none" : "all"; |
| var flashvars = _vars(_extend({ |
| jsVersion: ZeroClipboard.version |
| }, _globalConfig)); |
| var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig); |
| container = _createHtmlBridge(); |
| var divToBeReplaced = _document.createElement("div"); |
| container.appendChild(divToBeReplaced); |
| _document.body.appendChild(container); |
| var tmpDiv = _document.createElement("div"); |
| var usingActiveX = _flashState.pluginType === "activex"; |
| tmpDiv.innerHTML = '<object id="' + _globalConfig.swfObjectId + '" name="' + _globalConfig.swfObjectId + '" ' + 'width="100%" height="100%" ' + (usingActiveX ? 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"' : 'type="application/x-shockwave-flash" data="' + swfUrl + '"') + ">" + (usingActiveX ? '<param name="movie" value="' + swfUrl + '"/>' : "") + '<param name="allowScriptAccess" value="' + allowScriptAccess + '"/>' + '<param name="allowNetworking" value="' + allowNetworking + '"/>' + '<param name="menu" value="false"/>' + '<param name="wmode" value="transparent"/>' + '<param name="flashvars" value="' + flashvars + '"/>' + '<div id="' + _globalConfig.swfObjectId + '_fallbackContent"> </div>' + "</object>"; |
| flashBridge = tmpDiv.firstChild; |
| tmpDiv = null; |
| _unwrap(flashBridge).ZeroClipboard = ZeroClipboard; |
| container.replaceChild(flashBridge, divToBeReplaced); |
| _watchForSwfFallbackContent(); |
| } |
| if (!flashBridge) { |
| flashBridge = _document[_globalConfig.swfObjectId]; |
| if (flashBridge && (len = flashBridge.length)) { |
| flashBridge = flashBridge[len - 1]; |
| } |
| if (!flashBridge && container) { |
| flashBridge = container.firstChild; |
| } |
| } |
| _flashState.bridge = flashBridge || null; |
| return flashBridge; |
| }; |
| /** |
| * Destroy the SWF object. |
| * @private |
| */ |
| var _unembedSwf = function() { |
| var flashBridge = _flashState.bridge; |
| if (flashBridge) { |
| var htmlBridge = _getHtmlBridge(flashBridge); |
| if (htmlBridge) { |
| if (_flashState.pluginType === "activex" && "readyState" in flashBridge) { |
| flashBridge.style.display = "none"; |
| (function removeSwfFromIE() { |
| if (flashBridge.readyState === 4) { |
| for (var prop in flashBridge) { |
| if (typeof flashBridge[prop] === "function") { |
| flashBridge[prop] = null; |
| } |
| } |
| if (flashBridge.parentNode) { |
| flashBridge.parentNode.removeChild(flashBridge); |
| } |
| if (htmlBridge.parentNode) { |
| htmlBridge.parentNode.removeChild(htmlBridge); |
| } |
| } else { |
| _setTimeout(removeSwfFromIE, 10); |
| } |
| })(); |
| } else { |
| if (flashBridge.parentNode) { |
| flashBridge.parentNode.removeChild(flashBridge); |
| } |
| if (htmlBridge.parentNode) { |
| htmlBridge.parentNode.removeChild(htmlBridge); |
| } |
| } |
| } |
| _clearTimeoutsAndPolling(); |
| _flashState.ready = null; |
| _flashState.bridge = null; |
| _flashState.deactivated = null; |
| _zcSwfVersion = undefined; |
| } |
| }; |
| /** |
| * Map the data format names of the "clipData" to Flash-friendly names. |
| * |
| * @returns A new transformed object. |
| * @private |
| */ |
| var _mapClipDataToFlash = function(clipData) { |
| var newClipData = {}, formatMap = {}; |
| if (!(typeof clipData === "object" && clipData)) { |
| return; |
| } |
| for (var dataFormat in clipData) { |
| if (dataFormat && _hasOwn.call(clipData, dataFormat) && typeof clipData[dataFormat] === "string" && clipData[dataFormat]) { |
| switch (dataFormat.toLowerCase()) { |
| case "text/plain": |
| case "text": |
| case "air:text": |
| case "flash:text": |
| newClipData.text = clipData[dataFormat]; |
| formatMap.text = dataFormat; |
| break; |
| |
| case "text/html": |
| case "html": |
| case "air:html": |
| case "flash:html": |
| newClipData.html = clipData[dataFormat]; |
| formatMap.html = dataFormat; |
| break; |
| |
| case "application/rtf": |
| case "text/rtf": |
| case "rtf": |
| case "richtext": |
| case "air:rtf": |
| case "flash:rtf": |
| newClipData.rtf = clipData[dataFormat]; |
| formatMap.rtf = dataFormat; |
| break; |
| |
| default: |
| break; |
| } |
| } |
| } |
| return { |
| data: newClipData, |
| formatMap: formatMap |
| }; |
| }; |
| /** |
| * Map the data format names from Flash-friendly names back to their original "clipData" names (via a format mapping). |
| * |
| * @returns A new transformed object. |
| * @private |
| */ |
| var _mapClipResultsFromFlash = function(clipResults, formatMap) { |
| if (!(typeof clipResults === "object" && clipResults && typeof formatMap === "object" && formatMap)) { |
| return clipResults; |
| } |
| var newResults = {}; |
| for (var prop in clipResults) { |
| if (_hasOwn.call(clipResults, prop)) { |
| if (prop === "errors") { |
| newResults[prop] = clipResults[prop] ? clipResults[prop].slice() : []; |
| for (var i = 0, len = newResults[prop].length; i < len; i++) { |
| newResults[prop][i].format = formatMap[newResults[prop][i].format]; |
| } |
| } else if (prop !== "success" && prop !== "data") { |
| newResults[prop] = clipResults[prop]; |
| } else { |
| newResults[prop] = {}; |
| var tmpHash = clipResults[prop]; |
| for (var dataFormat in tmpHash) { |
| if (dataFormat && _hasOwn.call(tmpHash, dataFormat) && _hasOwn.call(formatMap, dataFormat)) { |
| newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat]; |
| } |
| } |
| } |
| } |
| } |
| return newResults; |
| }; |
| /** |
| * Will look at a path, and will create a "?noCache={time}" or "&noCache={time}" |
| * query param string to return. Does NOT append that string to the original path. |
| * This is useful because ExternalInterface often breaks when a Flash SWF is cached. |
| * |
| * @returns The `noCache` query param with necessary "?"/"&" prefix. |
| * @private |
| */ |
| var _cacheBust = function(path, options) { |
| var cacheBust = options == null || options && options.cacheBust === true; |
| if (cacheBust) { |
| return (path.indexOf("?") === -1 ? "?" : "&") + "noCache=" + _now(); |
| } else { |
| return ""; |
| } |
| }; |
| /** |
| * Creates a query string for the FlashVars param. |
| * Does NOT include the cache-busting query param. |
| * |
| * @returns FlashVars query string |
| * @private |
| */ |
| var _vars = function(options) { |
| var i, len, domain, domains, str = "", trustedOriginsExpanded = []; |
| if (options.trustedDomains) { |
| if (typeof options.trustedDomains === "string") { |
| domains = [ options.trustedDomains ]; |
| } else if (typeof options.trustedDomains === "object" && "length" in options.trustedDomains) { |
| domains = options.trustedDomains; |
| } |
| } |
| if (domains && domains.length) { |
| for (i = 0, len = domains.length; i < len; i++) { |
| if (_hasOwn.call(domains, i) && domains[i] && typeof domains[i] === "string") { |
| domain = _extractDomain(domains[i]); |
| if (!domain) { |
| continue; |
| } |
| if (domain === "*") { |
| trustedOriginsExpanded.length = 0; |
| trustedOriginsExpanded.push(domain); |
| break; |
| } |
| trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, "//" + domain, _window.location.protocol + "//" + domain ]); |
| } |
| } |
| } |
| if (trustedOriginsExpanded.length) { |
| str += "trustedOrigins=" + _encodeURIComponent(trustedOriginsExpanded.join(",")); |
| } |
| if (options.forceEnhancedClipboard === true) { |
| str += (str ? "&" : "") + "forceEnhancedClipboard=true"; |
| } |
| if (typeof options.swfObjectId === "string" && options.swfObjectId) { |
| str += (str ? "&" : "") + "swfObjectId=" + _encodeURIComponent(options.swfObjectId); |
| } |
| if (typeof options.jsVersion === "string" && options.jsVersion) { |
| str += (str ? "&" : "") + "jsVersion=" + _encodeURIComponent(options.jsVersion); |
| } |
| return str; |
| }; |
| /** |
| * Extract the domain (e.g. "github.com") from an origin (e.g. "https://github.com") or |
| * URL (e.g. "https://github.com/zeroclipboard/zeroclipboard/"). |
| * |
| * @returns the domain |
| * @private |
| */ |
| var _extractDomain = function(originOrUrl) { |
| if (originOrUrl == null || originOrUrl === "") { |
| return null; |
| } |
| originOrUrl = originOrUrl.replace(/^\s+|\s+$/g, ""); |
| if (originOrUrl === "") { |
| return null; |
| } |
| var protocolIndex = originOrUrl.indexOf("//"); |
| originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2); |
| var pathIndex = originOrUrl.indexOf("/"); |
| originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex); |
| if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === ".swf") { |
| return null; |
| } |
| return originOrUrl || null; |
| }; |
| /** |
| * Set `allowScriptAccess` based on `trustedDomains` and `window.location.host` vs. `swfPath`. |
| * |
| * @returns The appropriate script access level. |
| * @private |
| */ |
| var _determineScriptAccess = function() { |
| var _extractAllDomains = function(origins) { |
| var i, len, tmp, resultsArray = []; |
| if (typeof origins === "string") { |
| origins = [ origins ]; |
| } |
| if (!(typeof origins === "object" && origins && typeof origins.length === "number")) { |
| return resultsArray; |
| } |
| for (i = 0, len = origins.length; i < len; i++) { |
| if (_hasOwn.call(origins, i) && (tmp = _extractDomain(origins[i]))) { |
| if (tmp === "*") { |
| resultsArray.length = 0; |
| resultsArray.push("*"); |
| break; |
| } |
| if (resultsArray.indexOf(tmp) === -1) { |
| resultsArray.push(tmp); |
| } |
| } |
| } |
| return resultsArray; |
| }; |
| return function(currentDomain, configOptions) { |
| var swfDomain = _extractDomain(configOptions.swfPath); |
| if (swfDomain === null) { |
| swfDomain = currentDomain; |
| } |
| var trustedDomains = _extractAllDomains(configOptions.trustedDomains); |
| var len = trustedDomains.length; |
| if (len > 0) { |
| if (len === 1 && trustedDomains[0] === "*") { |
| return "always"; |
| } |
| if (trustedDomains.indexOf(currentDomain) !== -1) { |
| if (len === 1 && currentDomain === swfDomain) { |
| return "sameDomain"; |
| } |
| return "always"; |
| } |
| } |
| return "never"; |
| }; |
| }(); |
| /** |
| * Get the currently active/focused DOM element. |
| * |
| * @returns the currently active/focused element, or `null` |
| * @private |
| */ |
| var _safeActiveElement = function() { |
| try { |
| return _document.activeElement; |
| } catch (err) { |
| return null; |
| } |
| }; |
| /** |
| * Add a class to an element, if it doesn't already have it. |
| * |
| * @returns The element, with its new class added. |
| * @private |
| */ |
| var _addClass = function(element, value) { |
| var c, cl, className, classNames = []; |
| if (typeof value === "string" && value) { |
| classNames = value.split(/\s+/); |
| } |
| if (element && element.nodeType === 1 && classNames.length > 0) { |
| if (element.classList) { |
| for (c = 0, cl = classNames.length; c < cl; c++) { |
| element.classList.add(classNames[c]); |
| } |
| } else if (element.hasOwnProperty("className")) { |
| className = " " + element.className + " "; |
| for (c = 0, cl = classNames.length; c < cl; c++) { |
| if (className.indexOf(" " + classNames[c] + " ") === -1) { |
| className += classNames[c] + " "; |
| } |
| } |
| element.className = className.replace(/^\s+|\s+$/g, ""); |
| } |
| } |
| return element; |
| }; |
| /** |
| * Remove a class from an element, if it has it. |
| * |
| * @returns The element, with its class removed. |
| * @private |
| */ |
| var _removeClass = function(element, value) { |
| var c, cl, className, classNames = []; |
| if (typeof value === "string" && value) { |
| classNames = value.split(/\s+/); |
| } |
| if (element && element.nodeType === 1 && classNames.length > 0) { |
| if (element.classList && element.classList.length > 0) { |
| for (c = 0, cl = classNames.length; c < cl; c++) { |
| element.classList.remove(classNames[c]); |
| } |
| } else if (element.className) { |
| className = (" " + element.className + " ").replace(/[\r\n\t]/g, " "); |
| for (c = 0, cl = classNames.length; c < cl; c++) { |
| className = className.replace(" " + classNames[c] + " ", " "); |
| } |
| element.className = className.replace(/^\s+|\s+$/g, ""); |
| } |
| } |
| return element; |
| }; |
| /** |
| * Attempt to interpret the element's CSS styling. If `prop` is `"cursor"`, |
| * then we assume that it should be a hand ("pointer") cursor if the element |
| * is an anchor element ("a" tag). |
| * |
| * @returns The computed style property. |
| * @private |
| */ |
| var _getStyle = function(el, prop) { |
| var value = _getComputedStyle(el, null).getPropertyValue(prop); |
| if (prop === "cursor") { |
| if (!value || value === "auto") { |
| if (el.nodeName === "A") { |
| return "pointer"; |
| } |
| } |
| } |
| return value; |
| }; |
| /** |
| * Get the absolutely positioned coordinates of a DOM element. |
| * |
| * @returns Object containing the element's position, width, and height. |
| * @private |
| */ |
| var _getElementPosition = function(el) { |
| var pos = { |
| left: 0, |
| top: 0, |
| width: 0, |
| height: 0 |
| }; |
| if (el.getBoundingClientRect) { |
| var elRect = el.getBoundingClientRect(); |
| var pageXOffset = _window.pageXOffset; |
| var pageYOffset = _window.pageYOffset; |
| var leftBorderWidth = _document.documentElement.clientLeft || 0; |
| var topBorderWidth = _document.documentElement.clientTop || 0; |
| var leftBodyOffset = 0; |
| var topBodyOffset = 0; |
| if (_getStyle(_document.body, "position") === "relative") { |
| var bodyRect = _document.body.getBoundingClientRect(); |
| var htmlRect = _document.documentElement.getBoundingClientRect(); |
| leftBodyOffset = bodyRect.left - htmlRect.left || 0; |
| topBodyOffset = bodyRect.top - htmlRect.top || 0; |
| } |
| pos.left = elRect.left + pageXOffset - leftBorderWidth - leftBodyOffset; |
| pos.top = elRect.top + pageYOffset - topBorderWidth - topBodyOffset; |
| pos.width = "width" in elRect ? elRect.width : elRect.right - elRect.left; |
| pos.height = "height" in elRect ? elRect.height : elRect.bottom - elRect.top; |
| } |
| return pos; |
| }; |
| /** |
| * Determine is an element is visible somewhere within the document (page). |
| * |
| * @returns Boolean |
| * @private |
| */ |
| var _isElementVisible = function(el) { |
| if (!el) { |
| return false; |
| } |
| var styles = _getComputedStyle(el, null); |
| var hasCssHeight = _parseFloat(styles.height) > 0; |
| var hasCssWidth = _parseFloat(styles.width) > 0; |
| var hasCssTop = _parseFloat(styles.top) >= 0; |
| var hasCssLeft = _parseFloat(styles.left) >= 0; |
| var cssKnows = hasCssHeight && hasCssWidth && hasCssTop && hasCssLeft; |
| var rect = cssKnows ? null : _getElementPosition(el); |
| var isVisible = styles.display !== "none" && styles.visibility !== "collapse" && (cssKnows || !!rect && (hasCssHeight || rect.height > 0) && (hasCssWidth || rect.width > 0) && (hasCssTop || rect.top >= 0) && (hasCssLeft || rect.left >= 0)); |
| return isVisible; |
| }; |
| /** |
| * Clear all existing timeouts and interval polling delegates. |
| * |
| * @returns `undefined` |
| * @private |
| */ |
| var _clearTimeoutsAndPolling = function() { |
| _clearTimeout(_flashCheckTimeout); |
| _flashCheckTimeout = 0; |
| _clearInterval(_swfFallbackCheckInterval); |
| _swfFallbackCheckInterval = 0; |
| }; |
| /** |
| * Reposition the Flash object to cover the currently activated element. |
| * |
| * @returns `undefined` |
| * @private |
| */ |
| var _reposition = function() { |
| var htmlBridge; |
| if (_currentElement && (htmlBridge = _getHtmlBridge(_flashState.bridge))) { |
| var pos = _getElementPosition(_currentElement); |
| _extend(htmlBridge.style, { |
| width: pos.width + "px", |
| height: pos.height + "px", |
| top: pos.top + "px", |
| left: pos.left + "px", |
| zIndex: "" + _getSafeZIndex(_globalConfig.zIndex) |
| }); |
| } |
| }; |
| /** |
| * Sends a signal to the Flash object to display the hand cursor if `true`. |
| * |
| * @returns `undefined` |
| * @private |
| */ |
| var _setHandCursor = function(enabled) { |
| if (_flashState.ready === true) { |
| if (_flashState.bridge && typeof _flashState.bridge.setHandCursor === "function") { |
| _flashState.bridge.setHandCursor(enabled); |
| } else { |
| _flashState.ready = false; |
| } |
| } |
| }; |
| /** |
| * Get a safe value for `zIndex` |
| * |
| * @returns an integer, or "auto" |
| * @private |
| */ |
| var _getSafeZIndex = function(val) { |
| if (/^(?:auto|inherit)$/.test(val)) { |
| return val; |
| } |
| var zIndex; |
| if (typeof val === "number" && !_isNaN(val)) { |
| zIndex = val; |
| } else if (typeof val === "string") { |
| zIndex = _getSafeZIndex(_parseInt(val, 10)); |
| } |
| return typeof zIndex === "number" ? zIndex : "auto"; |
| }; |
| /** |
| * Attempt to detect if ZeroClipboard is executing inside of a sandboxed iframe. |
| * If it is, Flash Player cannot be used, so ZeroClipboard is dead in the water. |
| * |
| * @see {@link http://lists.w3.org/Archives/Public/public-whatwg-archive/2014Dec/0002.html} |
| * @see {@link https://github.com/zeroclipboard/zeroclipboard/issues/511} |
| * @see {@link http://zeroclipboard.org/test-iframes.html} |
| * |
| * @returns `true` (is sandboxed), `false` (is not sandboxed), or `null` (uncertain) |
| * @private |
| */ |
| var _detectSandbox = function(doNotReassessFlashSupport) { |
| var effectiveScriptOrigin, frame, frameError, previousState = _flashState.sandboxed, isSandboxed = null; |
| doNotReassessFlashSupport = doNotReassessFlashSupport === true; |
| if (_pageIsFramed === false) { |
| isSandboxed = false; |
| } else { |
| try { |
| frame = window.frameElement || null; |
| } catch (e) { |
| frameError = { |
| name: e.name, |
| message: e.message |
| }; |
| } |
| if (frame && frame.nodeType === 1 && frame.nodeName === "IFRAME") { |
| try { |
| isSandboxed = frame.hasAttribute("sandbox"); |
| } catch (e) { |
| isSandboxed = null; |
| } |
| } else { |
| try { |
| effectiveScriptOrigin = document.domain || null; |
| } catch (e) { |
| effectiveScriptOrigin = null; |
| } |
| if (effectiveScriptOrigin === null || frameError && frameError.name === "SecurityError" && /(^|[\s\(\[@])sandbox(es|ed|ing|[\s\.,!\)\]@]|$)/.test(frameError.message.toLowerCase())) { |
| isSandboxed = true; |
| } |
| } |
| } |
| _flashState.sandboxed = isSandboxed; |
| if (previousState !== isSandboxed && !doNotReassessFlashSupport) { |
| _detectFlashSupport(_ActiveXObject); |
| } |
| return isSandboxed; |
| }; |
| /** |
| * Detect the Flash Player status, version, and plugin type. |
| * |
| * @see {@link https://code.google.com/p/doctype-mirror/wiki/ArticleDetectFlash#The_code} |
| * @see {@link http://stackoverflow.com/questions/12866060/detecting-pepper-ppapi-flash-with-javascript} |
| * |
| * @returns `undefined` |
| * @private |
| */ |
| var _detectFlashSupport = function(ActiveXObject) { |
| var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = ""; |
| /** |
| * Derived from Apple's suggested sniffer. |
| * @param {String} desc e.g. "Shockwave Flash 7.0 r61" |
| * @returns {String} "7.0.61" |
| * @private |
| */ |
| function parseFlashVersion(desc) { |
| var matches = desc.match(/[\d]+/g); |
| matches.length = 3; |
| return matches.join("."); |
| } |
| function isPepperFlash(flashPlayerFileName) { |
| return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\.dll|libpepflashplayer\.so|pepperflashplayer\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === "chrome.plugin"); |
| } |
| function inspectPlugin(plugin) { |
| if (plugin) { |
| hasFlash = true; |
| if (plugin.version) { |
| flashVersion = parseFlashVersion(plugin.version); |
| } |
| if (!flashVersion && plugin.description) { |
| flashVersion = parseFlashVersion(plugin.description); |
| } |
| if (plugin.filename) { |
| isPPAPI = isPepperFlash(plugin.filename); |
| } |
| } |
| } |
| if (_navigator.plugins && _navigator.plugins.length) { |
| plugin = _navigator.plugins["Shockwave Flash"]; |
| inspectPlugin(plugin); |
| if (_navigator.plugins["Shockwave Flash 2.0"]) { |
| hasFlash = true; |
| flashVersion = "2.0.0.11"; |
| } |
| } else if (_navigator.mimeTypes && _navigator.mimeTypes.length) { |
| mimeType = _navigator.mimeTypes["application/x-shockwave-flash"]; |
| plugin = mimeType && mimeType.enabledPlugin; |
| inspectPlugin(plugin); |
| } else if (typeof ActiveXObject !== "undefined") { |
| isActiveX = true; |
| try { |
| ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); |
| hasFlash = true; |
| flashVersion = parseFlashVersion(ax.GetVariable("$version")); |
| } catch (e1) { |
| try { |
| ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); |
| hasFlash = true; |
| flashVersion = "6.0.21"; |
| } catch (e2) { |
| try { |
| ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); |
| hasFlash = true; |
| flashVersion = parseFlashVersion(ax.GetVariable("$version")); |
| } catch (e3) { |
| isActiveX = false; |
| } |
| } |
| } |
| } |
| _flashState.disabled = hasFlash !== true; |
| _flashState.outdated = flashVersion && _parseFloat(flashVersion) < _parseFloat(_minimumFlashVersion); |
| _flashState.version = flashVersion || "0.0.0"; |
| _flashState.pluginType = isPPAPI ? "pepper" : isActiveX ? "activex" : hasFlash ? "netscape" : "unknown"; |
| }; |
| /** |
| * Invoke the Flash detection algorithms immediately upon inclusion so we're not waiting later. |
| */ |
| _detectFlashSupport(_ActiveXObject); |
| /** |
| * Always assess the `sandboxed` state of the page at important Flash-related moments. |
| */ |
| _detectSandbox(true); |
| /** |
| * A shell constructor for `ZeroClipboard` client instances. |
| * |
| * @constructor |
| */ |
| var ZeroClipboard = function() { |
| if (!(this instanceof ZeroClipboard)) { |
| return new ZeroClipboard(); |
| } |
| if (typeof ZeroClipboard._createClient === "function") { |
| ZeroClipboard._createClient.apply(this, _args(arguments)); |
| } |
| }; |
| /** |
| * The ZeroClipboard library's version number. |
| * |
| * @static |
| * @readonly |
| * @property {string} |
| */ |
| _defineProperty(ZeroClipboard, "version", { |
| value: "2.2.0", |
| writable: false, |
| configurable: true, |
| enumerable: true |
| }); |
| /** |
| * Update or get a copy of the ZeroClipboard global configuration. |
| * Returns a copy of the current/updated configuration. |
| * |
| * @returns Object |
| * @static |
| */ |
| ZeroClipboard.config = function() { |
| return _config.apply(this, _args(arguments)); |
| }; |
| /** |
| * Diagnostic method that describes the state of the browser, Flash Player, and ZeroClipboard. |
| * |
| * @returns Object |
| * @static |
| */ |
| ZeroClipboard.state = function() { |
| return _state.apply(this, _args(arguments)); |
| }; |
| /** |
| * Check if Flash is unusable for any reason: disabled, outdated, deactivated, etc. |
| * |
| * @returns Boolean |
| * @static |
| */ |
| ZeroClipboard.isFlashUnusable = function() { |
| return _isFlashUnusable.apply(this, _args(arguments)); |
| }; |
| /** |
| * Register an event listener. |
| * |
| * @returns `ZeroClipboard` |
| * @static |
| */ |
| ZeroClipboard.on = function() { |
| return _on.apply(this, _args(arguments)); |
| }; |
| /** |
| * Unregister an event listener. |
| * If no `listener` function/object is provided, it will unregister all listeners for the provided `eventType`. |
| * If no `eventType` is provided, it will unregister all listeners for every event type. |
| * |
| * @returns `ZeroClipboard` |
| * @static |
| */ |
| ZeroClipboard.off = function() { |
| return _off.apply(this, _args(arguments)); |
| }; |
| /** |
| * Retrieve event listeners for an `eventType`. |
| * If no `eventType` is provided, it will retrieve all listeners for every event type. |
| * |
| * @returns array of listeners for the `eventType`; if no `eventType`, then a map/hash object of listeners for all event types; or `null` |
| */ |
| ZeroClipboard.handlers = function() { |
| return _listeners.apply(this, _args(arguments)); |
| }; |
| /** |
| * Event emission receiver from the Flash object, forwarding to any registered JavaScript event listeners. |
| * |
| * @returns For the "copy" event, returns the Flash-friendly "clipData" object; otherwise `undefined`. |
| * @static |
| */ |
| ZeroClipboard.emit = function() { |
| return _emit.apply(this, _args(arguments)); |
| }; |
| /** |
| * Create and embed the Flash object. |
| * |
| * @returns The Flash object |
| * @static |
| */ |
| ZeroClipboard.create = function() { |
| return _create.apply(this, _args(arguments)); |
| }; |
| /** |
| * Self-destruct and clean up everything, including the embedded Flash object. |
| * |
| * @returns `undefined` |
| * @static |
| */ |
| ZeroClipboard.destroy = function() { |
| return _destroy.apply(this, _args(arguments)); |
| }; |
| /** |
| * Set the pending data for clipboard injection. |
| * |
| * @returns `undefined` |
| * @static |
| */ |
| ZeroClipboard.setData = function() { |
| return _setData.apply(this, _args(arguments)); |
| }; |
| /** |
| * Clear the pending data for clipboard injection. |
| * If no `format` is provided, all pending data formats will be cleared. |
| * |
| * @returns `undefined` |
| * @static |
| */ |
| ZeroClipboard.clearData = function() { |
| return _clearData.apply(this, _args(arguments)); |
| }; |
| /** |
| * Get a copy of the pending data for clipboard injection. |
| * If no `format` is provided, a copy of ALL pending data formats will be returned. |
| * |
| * @returns `String` or `Object` |
| * @static |
| */ |
| ZeroClipboard.getData = function() { |
| return _getData.apply(this, _args(arguments)); |
| }; |
| /** |
| * Sets the current HTML object that the Flash object should overlay. This will put the global |
| * Flash object on top of the current element; depending on the setup, this may also set the |
| * pending clipboard text data as well as the Flash object's wrapping element's title attribute |
| * based on the underlying HTML element and ZeroClipboard configuration. |
| * |
| * @returns `undefined` |
| * @static |
| */ |
| ZeroClipboard.focus = ZeroClipboard.activate = function() { |
| return _focus.apply(this, _args(arguments)); |
| }; |
| /** |
| * Un-overlays the Flash object. This will put the global Flash object off-screen; depending on |
| * the setup, this may also unset the Flash object's wrapping element's title attribute based on |
| * the underlying HTML element and ZeroClipboard configuration. |
| * |
| * @returns `undefined` |
| * @static |
| */ |
| ZeroClipboard.blur = ZeroClipboard.deactivate = function() { |
| return _blur.apply(this, _args(arguments)); |
| }; |
| /** |
| * Returns the currently focused/"activated" HTML element that the Flash object is wrapping. |
| * |
| * @returns `HTMLElement` or `null` |
| * @static |
| */ |
| ZeroClipboard.activeElement = function() { |
| return _activeElement.apply(this, _args(arguments)); |
| }; |
| /** |
| * Keep track of the ZeroClipboard client instance counter. |
| */ |
| var _clientIdCounter = 0; |
| /** |
| * Keep track of the state of the client instances. |
| * |
| * Entry structure: |
| * _clientMeta[client.id] = { |
| * instance: client, |
| * elements: [], |
| * handlers: {} |
| * }; |
| */ |
| var _clientMeta = {}; |
| /** |
| * Keep track of the ZeroClipboard clipped elements counter. |
| */ |
| var _elementIdCounter = 0; |
| /** |
| * Keep track of the state of the clipped element relationships to clients. |
| * |
| * Entry structure: |
| * _elementMeta[element.zcClippingId] = [client1.id, client2.id]; |
| */ |
| var _elementMeta = {}; |
| /** |
| * Keep track of the state of the mouse event handlers for clipped elements. |
| * |
| * Entry structure: |
| * _mouseHandlers[element.zcClippingId] = { |
| * mouseover: function(event) {}, |
| * mouseout: function(event) {}, |
| * mouseenter: function(event) {}, |
| * mouseleave: function(event) {}, |
| * mousemove: function(event) {} |
| * }; |
| */ |
| var _mouseHandlers = {}; |
| /** |
| * Extending the ZeroClipboard configuration defaults for the Client module. |
| */ |
| _extend(_globalConfig, { |
| autoActivate: true |
| }); |
| /** |
| * The real constructor for `ZeroClipboard` client instances. |
| * @private |
| */ |
| var _clientConstructor = function(elements) { |
| var client = this; |
| client.id = "" + _clientIdCounter++; |
| _clientMeta[client.id] = { |
| instance: client, |
| elements: [], |
| handlers: {} |
| }; |
| if (elements) { |
| client.clip(elements); |
| } |
| ZeroClipboard.on("*", function(event) { |
| return client.emit(event); |
| }); |
| ZeroClipboard.on("destroy", function() { |
| client.destroy(); |
| }); |
| ZeroClipboard.create(); |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.Client.prototype.on`. |
| * @private |
| */ |
| var _clientOn = function(eventType, listener) { |
| var i, len, events, added = {}, meta = _clientMeta[this.id], handlers = meta && meta.handlers; |
| if (!meta) { |
| throw new Error("Attempted to add new listener(s) to a destroyed ZeroClipboard client instance"); |
| } |
| if (typeof eventType === "string" && eventType) { |
| events = eventType.toLowerCase().split(/\s+/); |
| } else if (typeof eventType === "object" && eventType && typeof listener === "undefined") { |
| for (i in eventType) { |
| if (_hasOwn.call(eventType, i) && typeof i === "string" && i && typeof eventType[i] === "function") { |
| this.on(i, eventType[i]); |
| } |
| } |
| } |
| if (events && events.length) { |
| for (i = 0, len = events.length; i < len; i++) { |
| eventType = events[i].replace(/^on/, ""); |
| added[eventType] = true; |
| if (!handlers[eventType]) { |
| handlers[eventType] = []; |
| } |
| handlers[eventType].push(listener); |
| } |
| if (added.ready && _flashState.ready) { |
| this.emit({ |
| type: "ready", |
| client: this |
| }); |
| } |
| if (added.error) { |
| for (i = 0, len = _flashStateErrorNames.length; i < len; i++) { |
| if (_flashState[_flashStateErrorNames[i].replace(/^flash-/, "")]) { |
| this.emit({ |
| type: "error", |
| name: _flashStateErrorNames[i], |
| client: this |
| }); |
| break; |
| } |
| } |
| if (_zcSwfVersion !== undefined && ZeroClipboard.version !== _zcSwfVersion) { |
| this.emit({ |
| type: "error", |
| name: "version-mismatch", |
| jsVersion: ZeroClipboard.version, |
| swfVersion: _zcSwfVersion |
| }); |
| } |
| } |
| } |
| return this; |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.Client.prototype.off`. |
| * @private |
| */ |
| var _clientOff = function(eventType, listener) { |
| var i, len, foundIndex, events, perEventHandlers, meta = _clientMeta[this.id], handlers = meta && meta.handlers; |
| if (!handlers) { |
| return this; |
| } |
| if (arguments.length === 0) { |
| events = _keys(handlers); |
| } else if (typeof eventType === "string" && eventType) { |
| events = eventType.split(/\s+/); |
| } else if (typeof eventType === "object" && eventType && typeof listener === "undefined") { |
| for (i in eventType) { |
| if (_hasOwn.call(eventType, i) && typeof i === "string" && i && typeof eventType[i] === "function") { |
| this.off(i, eventType[i]); |
| } |
| } |
| } |
| if (events && events.length) { |
| for (i = 0, len = events.length; i < len; i++) { |
| eventType = events[i].toLowerCase().replace(/^on/, ""); |
| perEventHandlers = handlers[eventType]; |
| if (perEventHandlers && perEventHandlers.length) { |
| if (listener) { |
| foundIndex = perEventHandlers.indexOf(listener); |
| while (foundIndex !== -1) { |
| perEventHandlers.splice(foundIndex, 1); |
| foundIndex = perEventHandlers.indexOf(listener, foundIndex); |
| } |
| } else { |
| perEventHandlers.length = 0; |
| } |
| } |
| } |
| } |
| return this; |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.Client.prototype.handlers`. |
| * @private |
| */ |
| var _clientListeners = function(eventType) { |
| var copy = null, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers; |
| if (handlers) { |
| if (typeof eventType === "string" && eventType) { |
| copy = handlers[eventType] ? handlers[eventType].slice(0) : []; |
| } else { |
| copy = _deepCopy(handlers); |
| } |
| } |
| return copy; |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.Client.prototype.emit`. |
| * @private |
| */ |
| var _clientEmit = function(event) { |
| if (_clientShouldEmit.call(this, event)) { |
| if (typeof event === "object" && event && typeof event.type === "string" && event.type) { |
| event = _extend({}, event); |
| } |
| var eventCopy = _extend({}, _createEvent(event), { |
| client: this |
| }); |
| _clientDispatchCallbacks.call(this, eventCopy); |
| } |
| return this; |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.Client.prototype.clip`. |
| * @private |
| */ |
| var _clientClip = function(elements) { |
| if (!_clientMeta[this.id]) { |
| throw new Error("Attempted to clip element(s) to a destroyed ZeroClipboard client instance"); |
| } |
| elements = _prepClip(elements); |
| for (var i = 0; i < elements.length; i++) { |
| if (_hasOwn.call(elements, i) && elements[i] && elements[i].nodeType === 1) { |
| if (!elements[i].zcClippingId) { |
| elements[i].zcClippingId = "zcClippingId_" + _elementIdCounter++; |
| _elementMeta[elements[i].zcClippingId] = [ this.id ]; |
| if (_globalConfig.autoActivate === true) { |
| _addMouseHandlers(elements[i]); |
| } |
| } else if (_elementMeta[elements[i].zcClippingId].indexOf(this.id) === -1) { |
| _elementMeta[elements[i].zcClippingId].push(this.id); |
| } |
| var clippedElements = _clientMeta[this.id] && _clientMeta[this.id].elements; |
| if (clippedElements.indexOf(elements[i]) === -1) { |
| clippedElements.push(elements[i]); |
| } |
| } |
| } |
| return this; |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.Client.prototype.unclip`. |
| * @private |
| */ |
| var _clientUnclip = function(elements) { |
| var meta = _clientMeta[this.id]; |
| if (!meta) { |
| return this; |
| } |
| var clippedElements = meta.elements; |
| var arrayIndex; |
| if (typeof elements === "undefined") { |
| elements = clippedElements.slice(0); |
| } else { |
| elements = _prepClip(elements); |
| } |
| for (var i = elements.length; i--; ) { |
| if (_hasOwn.call(elements, i) && elements[i] && elements[i].nodeType === 1) { |
| arrayIndex = 0; |
| while ((arrayIndex = clippedElements.indexOf(elements[i], arrayIndex)) !== -1) { |
| clippedElements.splice(arrayIndex, 1); |
| } |
| var clientIds = _elementMeta[elements[i].zcClippingId]; |
| if (clientIds) { |
| arrayIndex = 0; |
| while ((arrayIndex = clientIds.indexOf(this.id, arrayIndex)) !== -1) { |
| clientIds.splice(arrayIndex, 1); |
| } |
| if (clientIds.length === 0) { |
| if (_globalConfig.autoActivate === true) { |
| _removeMouseHandlers(elements[i]); |
| } |
| delete elements[i].zcClippingId; |
| } |
| } |
| } |
| } |
| return this; |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.Client.prototype.elements`. |
| * @private |
| */ |
| var _clientElements = function() { |
| var meta = _clientMeta[this.id]; |
| return meta && meta.elements ? meta.elements.slice(0) : []; |
| }; |
| /** |
| * The underlying implementation of `ZeroClipboard.Client.prototype.destroy`. |
| * @private |
| */ |
| var _clientDestroy = function() { |
| if (!_clientMeta[this.id]) { |
| return; |
| } |
| this.unclip(); |
| this.off(); |
| delete _clientMeta[this.id]; |
| }; |
| /** |
| * Inspect an Event to see if the Client (`this`) should honor it for emission. |
| * @private |
| */ |
| var _clientShouldEmit = function(event) { |
| if (!(event && event.type)) { |
| return false; |
| } |
| if (event.client && event.client !== this) { |
| return false; |
| } |
| var meta = _clientMeta[this.id]; |
| var clippedEls = meta && meta.elements; |
| var hasClippedEls = !!clippedEls && clippedEls.length > 0; |
| var goodTarget = !event.target || hasClippedEls && clippedEls.indexOf(event.target) !== -1; |
| var goodRelTarget = event.relatedTarget && hasClippedEls && clippedEls.indexOf(event.relatedTarget) !== -1; |
| var goodClient = event.client && event.client === this; |
| if (!meta || !(goodTarget || goodRelTarget || goodClient)) { |
| return false; |
| } |
| return true; |
| }; |
| /** |
| * Handle the actual dispatching of events to a client instance. |
| * |
| * @returns `undefined` |
| * @private |
| */ |
| var _clientDispatchCallbacks = function(event) { |
| var meta = _clientMeta[this.id]; |
| if (!(typeof event === "object" && event && event.type && meta)) { |
| return; |
| } |
| var async = _shouldPerformAsync(event); |
| var wildcardTypeHandlers = meta && meta.handlers["*"] || []; |
| var specificTypeHandlers = meta && meta.handlers[event.type] || []; |
| var handlers = wildcardTypeHandlers.concat(specificTypeHandlers); |
| if (handlers && handlers.length) { |
| var i, len, func, context, eventCopy, originalContext = this; |
| for (i = 0, len = handlers.length; i < len; i++) { |
| func = handlers[i]; |
| context = originalContext; |
| if (typeof func === "string" && typeof _window[func] === "function") { |
| func = _window[func]; |
| } |
| if (typeof func === "object" && func && typeof func.handleEvent === "function") { |
| context = func; |
| func = func.handleEvent; |
| } |
| if (typeof func === "function") { |
| eventCopy = _extend({}, event); |
| _dispatchCallback(func, context, [ eventCopy ], async); |
| } |
| } |
| } |
| }; |
| /** |
| * Prepares the elements for clipping/unclipping. |
| * |
| * @returns An Array of elements. |
| * @private |
| */ |
| var _prepClip = function(elements) { |
| if (typeof elements === "string") { |
| elements = []; |
| } |
| return typeof elements.length !== "number" ? [ elements ] : elements; |
| }; |
| /** |
| * Add a `mouseover` handler function for a clipped element. |
| * |
| * @returns `undefined` |
| * @private |
| */ |
| var _addMouseHandlers = function(element) { |
| if (!(element && element.nodeType === 1)) { |
| return; |
| } |
| var _suppressMouseEvents = function(event) { |
| if (!(event || (event = _window.event))) { |
| return; |
| } |
| if (event._source !== "js") { |
| event.stopImmediatePropagation(); |
| event.preventDefault(); |
| } |
| delete event._source; |
| }; |
| var _elementMouseOver = function(event) { |
| if (!(event || (event = _window.event))) { |
| return; |
| } |
| _suppressMouseEvents(event); |
| ZeroClipboard.focus(element); |
| }; |
| element.addEventListener("mouseover", _elementMouseOver, false); |
| element.addEventListener("mouseout", _suppressMouseEvents, false); |
| element.addEventListener("mouseenter", _suppressMouseEvents, false); |
| element.addEventListener("mouseleave", _suppressMouseEvents, false); |
| element.addEventListener("mousemove", _suppressMouseEvents, false); |
| _mouseHandlers[element.zcClippingId] = { |
| mouseover: _elementMouseOver, |
| mouseout: _suppressMouseEvents, |
| mouseenter: _suppressMouseEvents, |
| mouseleave: _suppressMouseEvents, |
| mousemove: _suppressMouseEvents |
| }; |
| }; |
| /** |
| * Remove a `mouseover` handler function for a clipped element. |
| * |
| * @returns `undefined` |
| * @private |
| */ |
| var _removeMouseHandlers = function(element) { |
| if (!(element && element.nodeType === 1)) { |
| return; |
| } |
| var mouseHandlers = _mouseHandlers[element.zcClippingId]; |
| if (!(typeof mouseHandlers === "object" && mouseHandlers)) { |
| return; |
| } |
| var key, val, mouseEvents = [ "move", "leave", "enter", "out", "over" ]; |
| for (var i = 0, len = mouseEvents.length; i < len; i++) { |
| key = "mouse" + mouseEvents[i]; |
| val = mouseHandlers[key]; |
| if (typeof val === "function") { |
| element.removeEventListener(key, val, false); |
| } |
| } |
| delete _mouseHandlers[element.zcClippingId]; |
| }; |
| /** |
| * Creates a new ZeroClipboard client instance. |
| * Optionally, auto-`clip` an element or collection of elements. |
| * |
| * @constructor |
| */ |
| ZeroClipboard._createClient = function() { |
| _clientConstructor.apply(this, _args(arguments)); |
| }; |
| /** |
| * Register an event listener to the client. |
| * |
| * @returns `this` |
| */ |
| ZeroClipboard.prototype.on = function() { |
| return _clientOn.apply(this, _args(arguments)); |
| }; |
| /** |
| * Unregister an event handler from the client. |
| * If no `listener` function/object is provided, it will unregister all handlers for the provided `eventType`. |
| * If no `eventType` is provided, it will unregister all handlers for every event type. |
| * |
| * @returns `this` |
| */ |
| ZeroClipboard.prototype.off = function() { |
| return _clientOff.apply(this, _args(arguments)); |
| }; |
| /** |
| * Retrieve event listeners for an `eventType` from the client. |
| * If no `eventType` is provided, it will retrieve all listeners for every event type. |
| * |
| * @returns array of listeners for the `eventType`; if no `eventType`, then a map/hash object of listeners for all event types; or `null` |
| */ |
| ZeroClipboard.prototype.handlers = function() { |
| return _clientListeners.apply(this, _args(arguments)); |
| }; |
| /** |
| * Event emission receiver from the Flash object for this client's registered JavaScript event listeners. |
| * |
| * @returns For the "copy" event, returns the Flash-friendly "clipData" object; otherwise `undefined`. |
| */ |
| ZeroClipboard.prototype.emit = function() { |
| return _clientEmit.apply(this, _args(arguments)); |
| }; |
| /** |
| * Register clipboard actions for new element(s) to the client. |
| * |
| * @returns `this` |
| */ |
| ZeroClipboard.prototype.clip = function() { |
| return _clientClip.apply(this, _args(arguments)); |
| }; |
| /** |
| * Unregister the clipboard actions of previously registered element(s) on the page. |
| * If no elements are provided, ALL registered elements will be unregistered. |
| * |
| * @returns `this` |
| */ |
| ZeroClipboard.prototype.unclip = function() { |
| return _clientUnclip.apply(this, _args(arguments)); |
| }; |
| /** |
| * Get all of the elements to which this client is clipped. |
| * |
| * @returns array of clipped elements |
| */ |
| ZeroClipboard.prototype.elements = function() { |
| return _clientElements.apply(this, _args(arguments)); |
| }; |
| /** |
| * Self-destruct and clean up everything for a single client. |
| * This will NOT destroy the embedded Flash object. |
| * |
| * @returns `undefined` |
| */ |
| ZeroClipboard.prototype.destroy = function() { |
| return _clientDestroy.apply(this, _args(arguments)); |
| }; |
| /** |
| * Stores the pending plain text to inject into the clipboard. |
| * |
| * @returns `this` |
| */ |
| ZeroClipboard.prototype.setText = function(text) { |
| if (!_clientMeta[this.id]) { |
| throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance"); |
| } |
| ZeroClipboard.setData("text/plain", text); |
| return this; |
| }; |
| /** |
| * Stores the pending HTML text to inject into the clipboard. |
| * |
| * @returns `this` |
| */ |
| ZeroClipboard.prototype.setHtml = function(html) { |
| if (!_clientMeta[this.id]) { |
| throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance"); |
| } |
| ZeroClipboard.setData("text/html", html); |
| return this; |
| }; |
| /** |
| * Stores the pending rich text (RTF) to inject into the clipboard. |
| * |
| * @returns `this` |
| */ |
| ZeroClipboard.prototype.setRichText = function(richText) { |
| if (!_clientMeta[this.id]) { |
| throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance"); |
| } |
| ZeroClipboard.setData("application/rtf", richText); |
| return this; |
| }; |
| /** |
| * Stores the pending data to inject into the clipboard. |
| * |
| * @returns `this` |
| */ |
| ZeroClipboard.prototype.setData = function() { |
| if (!_clientMeta[this.id]) { |
| throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance"); |
| } |
| ZeroClipboard.setData.apply(this, _args(arguments)); |
| return this; |
| }; |
| /** |
| * Clears the pending data to inject into the clipboard. |
| * If no `format` is provided, all pending data formats will be cleared. |
| * |
| * @returns `this` |
| */ |
| ZeroClipboard.prototype.clearData = function() { |
| if (!_clientMeta[this.id]) { |
| throw new Error("Attempted to clear pending clipboard data from a destroyed ZeroClipboard client instance"); |
| } |
| ZeroClipboard.clearData.apply(this, _args(arguments)); |
| return this; |
| }; |
| /** |
| * Gets a copy of the pending data to inject into the clipboard. |
| * If no `format` is provided, a copy of ALL pending data formats will be returned. |
| * |
| * @returns `String` or `Object` |
| */ |
| ZeroClipboard.prototype.getData = function() { |
| if (!_clientMeta[this.id]) { |
| throw new Error("Attempted to get pending clipboard data from a destroyed ZeroClipboard client instance"); |
| } |
| return ZeroClipboard.getData.apply(this, _args(arguments)); |
| }; |
| if (typeof define === "function" && define.amd) { |
| define(function() { |
| return ZeroClipboard; |
| }); |
| } else if (typeof module === "object" && module && typeof module.exports === "object" && module.exports) { |
| module.exports = ZeroClipboard; |
| } else { |
| window.ZeroClipboard = ZeroClipboard; |
| } |
| })(function() { |
| return this || window; |
| }()); |
| },{}]},{},[24,62,64,63,65,98,99,100,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,101,102,103,104,118,119,120,121,107,108,109,110,111,112,32,36,33,34,41,35,37,38,39,40])(24) |
| }); |