/* * (c) Copyright Ascensio System SIA 2010-2015 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, * EU, LV-1021. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ "use strict"; (function ($, window, undefined) { var asc = window["Asc"] ? window["Asc"] : (window["Asc"] = {}); var asc_applyFunction = asc.applyFunction; function asc_CEventsController() { if (! (this instanceof asc_CEventsController)) { return new asc_CEventsController(); } this.defaults = { vscrollStep: 10, hscrollStep: 10, scrollTimeout: 20, showArrows: true, isViewerMode: false, wheelScrollLines: 3, isNeedInvertOnActive: false }; this.view = undefined; this.widget = undefined; this.element = undefined; this.handlers = undefined; this.settings = $.extend(true, {}, this.defaults); this.vsb = undefined; this.vsbHSt = undefined; this.vsbApi = undefined; this.hsb = undefined; this.hsbHSt = undefined; this.hsbApi = undefined; this.resizeTimerId = undefined; this.scrollTimerId = undefined; this.moveRangeTimerId = undefined; this.moveResizeRangeTimerId = undefined; this.fillHandleModeTimerId = undefined; this.enableKeyEvents = true; this.isSelectMode = false; this.hasCursor = false; this.hasFocus = false; this.isCellEditMode = undefined; this.skipKeyPress = undefined; this.strictClose = false; this.lastKeyCode = undefined; this.targetInfo = undefined; this.isResizeMode = false; this.isResizeModeMove = false; this.isFillHandleMode = false; this.isMoveRangeMode = false; this.isMoveResizeRange = false; this.isSelectionDialogMode = false; this.isFormulaEditMode = false; this.frozenAnchorMode = false; this.clickCounter = new ClickCounter(); this.isMousePressed = false; this.isShapeAction = false; this.isDblClickInMouseDown = false; this.isDoBrowserDblClick = false; this.mouseDownLastCord = null; this.vsbApiLockMouse = false; this.hsbApiLockMouse = false; this.__handlers = null; return this; } asc_CEventsController.prototype.init = function (view, widgetElem, canvasElem, handlers) { var self = this; this.view = view; this.widget = widgetElem; this.element = canvasElem; this.handlers = new asc.asc_CHandlersList(handlers); this._createScrollBars(); if (this.view.Api.isMobileVersion) { var __hasTouch = "ontouchstart" in window; if (__hasTouch) { this.widget.addEventListener("touchstart", function (e) { self._onTouchStart(e); return false; }, false); this.widget.addEventListener("touchmove", function (e) { self._onTouchMove(e); return false; }, false); this.widget.addEventListener("touchend", function (e) { self._onTouchEnd(e); return false; }, false); } else { this.widget.addEventListener("touchstart", function (e) { self._onMouseDown(e.touches[0]); return false; }, false); this.widget.addEventListener("touchmove", function (e) { self._onMouseMove(e.touches[0]); return false; }, false); this.widget.addEventListener("touchend", function (e) { self._onMouseUp(e.changedTouches[0]); return false; }, false); } window.addEventListener("resize", function () { self._onWindowResize.apply(self, arguments); }, false); return this; } if (window.addEventListener) { window.addEventListener("resize", function () { self._onWindowResize.apply(self, arguments); }, false); window.addEventListener("keydown", function () { return self._onWindowKeyDown.apply(self, arguments); }, false); window.addEventListener("keypress", function () { return self._onWindowKeyPress.apply(self, arguments); }, false); window.addEventListener("keyup", function () { return self._onWindowKeyUp.apply(self, arguments); }, false); window.addEventListener("mousemove", function () { return self._onWindowMouseMove.apply(self, arguments); }, false); window.addEventListener("mouseup", function () { return self._onWindowMouseUp.apply(self, arguments); }, false); window.addEventListener("mouseleave", function () { return self._onWindowMouseLeaveOut.apply(self, arguments); }, false); window.addEventListener("mouseout", function () { return self._onWindowMouseLeaveOut.apply(self, arguments); }, false); } if (this.element.onselectstart) { this.element.onselectstart = function () { return false; }; } if (this.element.addEventListener) { this.element.addEventListener("mousedown", function () { return self._onMouseDown.apply(self, arguments); }, false); this.element.addEventListener("mouseup", function () { return self._onMouseUp.apply(self, arguments); }, false); this.element.addEventListener("mousemove", function () { return self._onMouseMove.apply(self, arguments); }, false); this.element.addEventListener("mouseleave", function () { return self._onMouseLeave.apply(self, arguments); }, false); this.element.addEventListener("dblclick", function () { return self._onMouseDblClick.apply(self, arguments); }, false); } if (this.widget.addEventListener) { var nameWheelEvent = "onwheel" in document.createElement("div") ? "wheel" : document.onmousewheel !== undefined ? "mousewheel" : "DOMMouseScroll"; this.widget.addEventListener(nameWheelEvent, function () { return self._onMouseWheel.apply(self, arguments); }, false); } var oShapeCursor = document.getElementById("id_target_cursor"); if (null != oShapeCursor && oShapeCursor.addEventListener) { oShapeCursor.addEventListener("mousedown", function () { return self._onMouseDown.apply(self, arguments); }, false); oShapeCursor.addEventListener("mouseup", function () { return self._onMouseUp.apply(self, arguments); }, false); oShapeCursor.addEventListener("mousemove", function () { return self._onMouseMove.apply(self, arguments); }, false); oShapeCursor.addEventListener("mouseleave", function () { return self._onMouseLeave.apply(self, arguments); }, false); } return this; }; asc_CEventsController.prototype.destroy = function () { return this; }; asc_CEventsController.prototype.enableKeyEventsHandler = function (flag) { this.enableKeyEvents = !!flag; }; asc_CEventsController.prototype.setCellEditMode = function (flag) { this.isCellEditMode = !!flag; }; asc_CEventsController.prototype.setViewerMode = function (isViewerMode) { this.settings.isViewerMode = !!isViewerMode; }; asc_CEventsController.prototype.getViewerMode = function () { return this.settings.isViewerMode; }; asc_CEventsController.prototype.setFocus = function (hasFocus) { this.hasFocus = !!hasFocus; }; asc_CEventsController.prototype.setStrictClose = function (enabled) { this.strictClose = !!enabled; }; asc_CEventsController.prototype.setFormulaEditMode = function (isFormulaEditMode) { this.isFormulaEditMode = !!isFormulaEditMode; }; asc_CEventsController.prototype.setSelectionDialogMode = function (isSelectionDialogMode) { this.isSelectionDialogMode = isSelectionDialogMode; }; asc_CEventsController.prototype.reinitializeScroll = function (whichSB) { if (window["NATIVE_EDITOR_ENJINE"]) { return; } var self = this, opt = this.settings, ws = self.view.getWorksheet(), isVert = !whichSB || whichSB === 1, isHoriz = !whichSB || whichSB === 2; if (isVert || isHoriz) { this.handlers.trigger("reinitializeScroll", whichSB, function (vSize, hSize) { if (isVert) { vSize = self.vsb.offsetHeight + Math.max(vSize * opt.vscrollStep, 1); self.vsbHSt.height = vSize + "px"; self.vsbApi.Reinit(opt, opt.vscrollStep * ws.getFirstVisibleRow(true)); } if (isHoriz) { hSize = self.hsb.offsetWidth + Math.max(hSize * opt.hscrollStep, 1); self.hsbHSt.width = hSize + "px"; self.hsbApi.Reinit(opt, opt.vscrollStep * ws.getFirstVisibleCol(true)); } }); } return this; }; asc_CEventsController.prototype.scroll = function (delta) { if (delta) { if (delta.deltaX) { this.scrollHorizontal(delta.deltaX); } if (delta.deltaY) { this.scrollVertical(delta.deltaY); } } }; asc_CEventsController.prototype.scrollVertical = function (delta, event) { if (window["NATIVE_EDITOR_ENJINE"]) { return; } if (event && event.preventDefault) { event.preventDefault(); } this.vsbApi.scrollByY(this.settings.vscrollStep * delta); return true; }; asc_CEventsController.prototype.scrollHorizontal = function (delta, event) { if (window["NATIVE_EDITOR_ENJINE"]) { return; } if (event && event.preventDefault) { event.preventDefault(); } this.hsbApi.scrollByX(this.settings.hscrollStep * delta); return true; }; asc_CEventsController.prototype.doMouseDblClick = function (event, isHideCursor) { var t = this; var ctrlKey = event.metaKey || event.ctrlKey; if (t.settings.isViewerMode || t.isFormulaEditMode || t.isSelectionDialogMode) { return true; } if (this.targetInfo && (this.targetInfo.target == c_oTargetType.MoveResizeRange || this.targetInfo.target == c_oTargetType.MoveRange || this.targetInfo.target == c_oTargetType.FillHandle)) { return true; } if (t.isCellEditMode) { if (!t.handlers.trigger("stopCellEditing")) { return true; } } var coord = t._getCoordinates(event); var graphicsInfo = t.handlers.trigger("getGraphicsInfo", coord.x, coord.y); if (graphicsInfo) { return; } setTimeout(function () { var coord = t._getCoordinates(event); t.handlers.trigger("mouseDblClick", coord.x, coord.y, isHideCursor, function () { t.handlers.trigger("updateWorksheet", t.element, coord.x, coord.y, ctrlKey, function (info) { t.targetInfo = info; }); }); }, 100); return true; }; asc_CEventsController.prototype.showCellEditorCursor = function () { if (this.isCellEditMode) { if (this.isDoBrowserDblClick) { this.isDoBrowserDblClick = false; this.handlers.trigger("showCellEditorCursor"); } } }; asc_CEventsController.prototype._createScrollBars = function () { var self = this, opt = this.settings; this.vsb = document.createElement("div"); this.vsb.id = "ws-v-scrollbar"; this.vsb.innerHTML = '
'; this.widget.appendChild(this.vsb); this.vsbHSt = document.getElementById("ws-v-scroll-helper").style; if (!this.vsbApi) { this.vsbApi = new ScrollObject(this.vsb.id, opt); this.vsbApi.bind("scrollvertical", function (evt) { self.handlers.trigger("scrollY", evt.scrollPositionY / opt.vscrollStep); }); this.vsbApi.bind("scrollVEnd", function (evt) { self.handlers.trigger("addRow", true); }); this.vsbApi.onLockMouse = function (evt) { self.vsbApiLockMouse = true; }; this.vsbApi.offLockMouse = function () { self.vsbApiLockMouse = false; }; } this.hsb = document.createElement("div"); this.hsb.id = "ws-h-scrollbar"; this.hsb.innerHTML = ''; this.widget.appendChild(this.hsb); this.hsbHSt = document.getElementById("ws-h-scroll-helper").style; if (!this.hsbApi) { this.hsbApi = new ScrollObject(this.hsb.id, $.extend(true, {}, opt, { wheelScrollLines: 1 })); this.hsbApi.bind("scrollhorizontal", function (evt) { self.handlers.trigger("scrollX", evt.scrollPositionX / opt.hscrollStep); }); this.hsbApi.bind("scrollHEnd", function (evt) { self.handlers.trigger("addColumn", true); }); this.hsbApi.onLockMouse = function () { self.hsbApiLockMouse = true; }; this.hsbApi.offLockMouse = function () { self.hsbApiLockMouse = false; }; } if (!this.view.Api.isMobileVersion) { var corner = document.createElement("div"); corner.id = "ws-scrollbar-corner"; this.widget.appendChild(corner); } else { this.hsb.style.zIndex = -10; this.hsb.style.right = 0; this.hsb.style.display = "none"; this.vsb.style.zIndex = -10; this.vsb.style.bottom = 0; this.vsb.style.display = "none"; } }; asc_CEventsController.prototype._changeSelection = function (event, isSelectMode, callback) { var t = this; var coord = this._getCoordinates(event); if (t.isFormulaEditMode) { if (false === t.handlers.trigger("canEnterCellRange")) { if (!t.handlers.trigger("stopCellEditing")) { return; } } } this.handlers.trigger("changeSelection", false, coord.x, coord.y, true, isSelectMode, function (d) { t.scroll(d); if (t.isFormulaEditMode) { t.handlers.trigger("enterCellRange"); } else { if (t.isCellEditMode) { if (!t.handlers.trigger("stopCellEditing")) { return; } } } asc_applyFunction(callback); }); }; asc_CEventsController.prototype._changeSelection2 = function (event) { var t = this; var fn = function () { t._changeSelection2(event); }; var callback = function () { if (t.isSelectMode && !t.hasCursor) { t.scrollTimerId = window.setTimeout(fn, t.settings.scrollTimeout); } }; window.clearTimeout(t.scrollTimerId); t.scrollTimerId = window.setTimeout(function () { if (t.isSelectMode && !t.hasCursor) { t._changeSelection(event, true, callback); } }, 0); }; asc_CEventsController.prototype._moveRangeHandle2 = function (event) { var t = this; var fn = function () { t._moveRangeHandle2(event); }; var callback = function () { if (t.isMoveRangeMode && !t.hasCursor) { t.moveRangeTimerId = window.setTimeout(fn, t.settings.scrollTimeout); } }; window.clearTimeout(t.moveRangeTimerId); t.moveRangeTimerId = window.setTimeout(function () { if (t.isMoveRangeMode && !t.hasCursor) { t._moveRangeHandle(event, callback); } }, 0); }; asc_CEventsController.prototype._moveResizeRangeHandle2 = function (event) { var t = this; var fn = function () { t._moveResizeRangeHandle2(event); }; var callback = function () { if (t.isMoveResizeRange && !t.hasCursor) { t.moveResizeRangeTimerId = window.setTimeout(fn, t.settings.scrollTimeout); } }; window.clearTimeout(t.moveResizeRangeTimerId); t.moveResizeRangeTimerId = window.setTimeout(function () { if (t.isMoveResizeRange && !t.hasCursor) { t._moveResizeRangeHandle(event, t.targetInfo, callback); } }, 0); }; asc_CEventsController.prototype._changeSelectionDone = function (event) { var coord = this._getCoordinates(event); var ctrlKey = event.metaKey || event.ctrlKey; if (false === ctrlKey) { coord.x = -1; coord.y = -1; } this.handlers.trigger("changeSelectionDone", coord.x, coord.y); }; asc_CEventsController.prototype._resizeElement = function (event) { var coord = this._getCoordinates(event); this.handlers.trigger("resizeElement", this.targetInfo, coord.x, coord.y); }; asc_CEventsController.prototype._resizeElementDone = function (event) { var coord = this._getCoordinates(event); this.handlers.trigger("resizeElementDone", this.targetInfo, coord.x, coord.y, this.isResizeModeMove); this.isResizeModeMove = false; }; asc_CEventsController.prototype._changeFillHandle = function (event, callback) { var t = this; var coord = this._getCoordinates(event); this.handlers.trigger("changeFillHandle", coord.x, coord.y, function (d) { if (!d) { return; } t.scroll(d); asc_applyFunction(callback); }); }; asc_CEventsController.prototype._changeFillHandle2 = function (event) { var t = this; var fn = function () { t._changeFillHandle2(event); }; var callback = function () { if (t.isFillHandleMode && !t.hasCursor) { t.fillHandleModeTimerId = window.setTimeout(fn, t.settings.scrollTimeout); } }; window.clearTimeout(t.fillHandleModeTimerId); t.fillHandleModeTimerId = window.setTimeout(function () { if (t.isFillHandleMode && !t.hasCursor) { t._changeFillHandle(event, callback); } }, 0); }; asc_CEventsController.prototype._changeFillHandleDone = function (event) { var coord = this._getCoordinates(event); this.handlers.trigger("changeFillHandleDone", coord.x, coord.y, event.metaKey || event.ctrlKey); }; asc_CEventsController.prototype._moveRangeHandle = function (event, callback) { var t = this; var coord = this._getCoordinates(event); this.handlers.trigger("moveRangeHandle", coord.x, coord.y, function (d) { if (!d) { return; } t.scroll(d); asc_applyFunction(callback); }, event.metaKey || event.ctrlKey); }; asc_CEventsController.prototype._moveFrozenAnchorHandle = function (event, target) { var t = this; var coord = t._getCoordinates(event); t.handlers.trigger("moveFrozenAnchorHandle", coord.x, coord.y, target); }; asc_CEventsController.prototype._moveFrozenAnchorHandleDone = function (event, target) { var t = this; var coord = t._getCoordinates(event); t.handlers.trigger("moveFrozenAnchorHandleDone", coord.x, coord.y, target); }; asc_CEventsController.prototype._moveResizeRangeHandle = function (event, target, callback) { var t = this; var coord = this._getCoordinates(event); this.handlers.trigger("moveResizeRangeHandle", coord.x, coord.y, target, function (d) { if (!d) { return; } t.scroll(d); asc_applyFunction(callback); }); }; asc_CEventsController.prototype._autoFiltersClick = function (idFilter) { this.handlers.trigger("autoFiltersClick", idFilter); }; asc_CEventsController.prototype._commentCellClick = function (event) { var t = this; var coord = t._getCoordinates(event); this.handlers.trigger("commentCellClick", coord.x, coord.y); }; asc_CEventsController.prototype._moveRangeHandleDone = function (event) { this.handlers.trigger("moveRangeHandleDone", event.metaKey || event.ctrlKey); }; asc_CEventsController.prototype._moveResizeRangeHandleDone = function (event, target) { this.handlers.trigger("moveResizeRangeHandleDone", target); }; asc_CEventsController.prototype._onWindowResize = function (event) { var self = this; window.clearTimeout(this.resizeTimerId); this.resizeTimerId = window.setTimeout(function () { self.handlers.trigger("resize", event); }, 150); }; asc_CEventsController.prototype._onWindowKeyDown = function (event) { var t = this, dc = 0, dr = 0, isViewerMode = t.settings.isViewerMode; var ctrlKey = event.metaKey || event.ctrlKey; var shiftKey = event.shiftKey; var result = true; function stop(immediate) { event.stopPropagation(); immediate ? event.stopImmediatePropagation() : true; event.preventDefault(); result = false; } if (event.which === 18) { t.lastKeyCode = event.which; } var graphicObjects = t.handlers.trigger("getSelectedGraphicObjects"); if (!t.isMousePressed && graphicObjects.length && t.enableKeyEvents) { if (t.handlers.trigger("graphicObjectWindowKeyDown", event)) { return result; } } var selectionActivePointChanged = false; this.showCellEditorCursor(); while (t.isCellEditMode && !t.hasFocus || !t.enableKeyEvents || t.isSelectMode || t.isFillHandleMode || t.isMoveRangeMode || t.isMoveResizeRange) { if (t.isCellEditMode && !t.strictClose && t.enableKeyEvents && event.which >= 37 && event.which <= 40) { break; } if (!t.enableKeyEvents && ctrlKey && (80 === event.which)) { break; } return result; } t.skipKeyPress = true; if (!t.isCellEditMode) { if (!t.handlers.trigger("popUpSelectorKeyDown", event)) { stop(); return result; } } switch (event.which) { case 113: if (isViewerMode || t.isCellEditMode || t.isSelectionDialogMode || graphicObjects.length) { return true; } if (AscBrowser.isOpera) { stop(); } t.strictClose = true; t.handlers.trigger("editCell", 0, 0, false, true, false, undefined, false); return result; case 8: if (isViewerMode || t.isCellEditMode || t.isSelectionDialogMode) { return true; } stop(); t.handlers.trigger("editCell", 0, 0, false, false, true, undefined, false, undefined, event); return true; case 46: if (isViewerMode || t.isCellEditMode || t.isSelectionDialogMode) { return true; } t.handlers.trigger("empty"); return result; case 9: if (t.isCellEditMode) { return true; } stop(); selectionActivePointChanged = true; if (shiftKey) { dc = -1; shiftKey = false; } else { dc = +1; } break; case 13: if (t.isCellEditMode) { return true; } selectionActivePointChanged = true; if (shiftKey) { dr = -1; shiftKey = false; } else { dr = +1; } break; case 27: stop(); t.handlers.trigger("stopFormatPainter"); return result; case 144: case 145: if (AscBrowser.isOpera) { stop(); } return result; case 32: if (t.isCellEditMode) { return true; } if (!ctrlKey && !shiftKey) { t.skipKeyPress = false; return true; } stop(); if (ctrlKey && shiftKey) { t.handlers.trigger("changeSelection", true, 0, 0, true, false); } else { if (ctrlKey) { t.handlers.trigger("selectColumnsByRange"); } else { t.handlers.trigger("selectRowsByRange"); } } return result; case 33: stop(); if (ctrlKey) { t.handlers.trigger("showNextPrevWorksheet", -1); return true; } else { event.altKey ? dc = -0.5 : dr = -0.5; } break; case 34: stop(); if (ctrlKey) { t.handlers.trigger("showNextPrevWorksheet", +1); return true; } else { event.altKey ? dc = +0.5 : dr = +0.5; } break; case 37: stop(); dc = ctrlKey ? -1.5 : -1; break; case 38: stop(); if (t.isCellEditMode && t.handlers.trigger("isPopUpSelectorOpen")) { return result; } dr = ctrlKey ? -1.5 : -1; break; case 39: stop(); dc = ctrlKey ? +1.5 : +1; break; case 40: stop(); if (t.isCellEditMode && t.handlers.trigger("isPopUpSelectorOpen")) { return result; } if (!isViewerMode && !t.isCellEditMode && !t.isSelectionDialogMode && event.altKey) { t.handlers.trigger("showAutoComplete"); return result; } dr = ctrlKey ? +1.5 : +1; break; case 36: stop(); dc = -2.5; if (ctrlKey) { dr = -2.5; } break; case 35: stop(); dc = 2.5; if (ctrlKey) { dr = 2.5; } break; case 53: case 66: case 73: case 85: case 86: case 88: case 89: case 90: if (isViewerMode || t.isSelectionDialogMode) { stop(); return result; } case 65: case 67: if (t.isCellEditMode) { return true; } case 80: if (t.isCellEditMode) { stop(); return result; } if (!ctrlKey) { t.skipKeyPress = false; return true; } if (67 !== event.which && 86 !== event.which && 88 !== event.which) { stop(); } if (!t.__handlers) { t.__handlers = { 53: function () { t.handlers.trigger("setFontAttributes", "s"); }, 65: function () { t.handlers.trigger("changeSelection", true, -1, -1, true, false); }, 66: function () { t.handlers.trigger("setFontAttributes", "b"); }, 73: function () { t.handlers.trigger("setFontAttributes", "i"); }, 85: function () { t.handlers.trigger("setFontAttributes", "u"); }, 80: function () { t.handlers.trigger("print"); }, 67: function () { t.handlers.trigger("copy"); }, 86: function () { if (!window.GlobalPasteFlag) { if (!window.USER_AGENT_SAFARI_MACOS) { window.GlobalPasteFlag = true; t.handlers.trigger("paste"); } else { if (0 === window.GlobalPasteFlagCounter) { SafariIntervalFocus2(); window.GlobalPasteFlag = true; t.handlers.trigger("paste"); } } } else { if (!window.USER_AGENT_SAFARI_MACOS) { stop(); } } }, 88: function () { t.handlers.trigger("cut"); }, 89: function () { t.handlers.trigger("redo"); }, 90: function () { t.handlers.trigger("undo"); } }; } t.__handlers[event.which](); return result; case 61: case 187: if (isViewerMode || t.isCellEditMode || t.isSelectionDialogMode) { return true; } if (event.altKey) { t.handlers.trigger("addFunction", "SUM", true); } else { t.skipKeyPress = false; } return true; case 93: stop(); this.handlers.trigger("onContextMenu", event); return result; default: if (!ctrlKey && !event.altKey) { t.skipKeyPress = false; } return true; } if ((dc !== 0 || dr !== 0) && false === t.handlers.trigger("isGlobalLockEditCell")) { if (selectionActivePointChanged) { t.handlers.trigger("selectionActivePointChanged", dc, dr, function (d) { t.scroll(d); }); } else { if (this.isCellEditMode && !this.isFormulaEditMode) { if (!t.handlers.trigger("stopCellEditing")) { return true; } } if (t.isFormulaEditMode) { if (false === t.handlers.trigger("canEnterCellRange")) { if (!t.handlers.trigger("stopCellEditing")) { return true; } } } t.handlers.trigger("changeSelection", !shiftKey, dc, dr, false, false, function (d) { t.scroll(d); if (t.isFormulaEditMode) { t.handlers.trigger("enterCellRange"); } else { if (t.isCellEditMode) { t.handlers.trigger("stopCellEditing"); } } }); } } return result; }; asc_CEventsController.prototype._onWindowKeyPress = function (event) { if (!this.enableKeyEvents) { return true; } if (this.settings.isViewerMode || this.isSelectionDialogMode) { return true; } this.showCellEditorCursor(); if (this.isCellEditMode && !this.hasFocus || this.isSelectMode || !this.handlers.trigger("canReceiveKeyPress")) { return true; } if (this.skipKeyPress || event.which < 32) { this.skipKeyPress = true; return true; } var graphicObjects = this.handlers.trigger("getSelectedGraphicObjects"); if (graphicObjects.length && this.handlers.trigger("graphicObjectWindowKeyPress", event)) { return true; } if (!this.isCellEditMode) { this.handlers.trigger("editCell", 0, 0, false, false, true, undefined, true, undefined, event); } return true; }; asc_CEventsController.prototype._onWindowKeyUp = function (event) { var t = this; if (t.lastKeyCode === 18 && event.which === 18) { return false; } if (16 === event.which) { this.handlers.trigger("updateSelectionName"); } return true; }; asc_CEventsController.prototype._onWindowMouseMove = function (event) { var coord = this._getCoordinates(event); if (this.isSelectMode && !this.hasCursor) { this._changeSelection2(event); } if (this.isResizeMode && !this.hasCursor) { this.isResizeModeMove = true; this._resizeElement(event); } if (this.hsbApiLockMouse) { this.hsbApi.mouseDown ? this.hsbApi.evt_mousemove.call(this.hsbApi, event) : false; } else { if (this.vsbApiLockMouse) { this.vsbApi.mouseDown ? this.vsbApi.evt_mousemove.call(this.vsbApi, event) : false; } } if (this.frozenAnchorMode) { this._moveFrozenAnchorHandle(event, this.frozenAnchorMode); return true; } if (this.isShapeAction) { event.isLocked = this.isMousePressed; this.handlers.trigger("graphicObjectMouseMove", event, coord.x, coord.y); } return true; }; asc_CEventsController.prototype._onWindowMouseUp = function (event) { var coord = this._getCoordinates(event); if (this.hsbApiLockMouse) { this.hsbApi.mouseDown ? this.hsbApi.evt_mouseup.call(this.hsbApi, event) : false; } else { if (this.vsbApiLockMouse) { this.vsbApi.mouseDown ? this.vsbApi.evt_mouseup.call(this.vsbApi, event) : false; } } this.isMousePressed = false; if (this.isShapeAction) { event.isLocked = this.isMousePressed; event.ClickCount = this.clickCounter.clickCount; this.handlers.trigger("graphicObjectMouseUp", event, coord.x, coord.y); this._changeSelectionDone(event); return true; } if (this.isSelectMode) { this.isSelectMode = false; this._changeSelectionDone(event); } if (this.isResizeMode) { this.isResizeMode = false; this._resizeElementDone(event); } if (this.isFillHandleMode) { this.isFillHandleMode = false; this._changeFillHandleDone(event); } if (this.isMoveRangeMode) { this.isMoveRangeMode = false; this._moveRangeHandleDone(event); } if (this.isMoveResizeRange) { this.isMoveResizeRange = false; this.handlers.trigger("moveResizeRangeHandleDone", this.targetInfo); } if (this.frozenAnchorMode) { this._moveFrozenAnchorHandleDone(event, this.frozenAnchorMode); this.frozenAnchorMode = false; } this.showCellEditorCursor(); return true; }; asc_CEventsController.prototype._onWindowMouseUpExternal = function (event, x, y) { if (null != x && null != y) { event.coord = { x: x, y: y }; } this._onWindowMouseUp(event); }; asc_CEventsController.prototype._onWindowMouseLeaveOut = function (event) { if (!this.isDoBrowserDblClick) { return true; } var relatedTarget = event.relatedTarget || event.fromElement; if (relatedTarget && ("ce-canvas-outer" === relatedTarget.id || "ce-canvas" === relatedTarget.id || "ce-canvas-overlay" === relatedTarget.id || "ce-cursor" === relatedTarget.id || "ws-canvas-overlay" === relatedTarget.id)) { return true; } this.showCellEditorCursor(); return true; }; asc_CEventsController.prototype._onMouseDown = function (event) { var t = this; var coord = t._getCoordinates(event); event.isLocked = t.isMousePressed = true; if (t.handlers.trigger("isGlobalLockEditCell")) { return; } if (!this.enableKeyEvents) { t.handlers.trigger("canvasClick"); } var graphicsInfo = t.handlers.trigger("getGraphicsInfo", coord.x, coord.y); if (asc["editor"].isStartAddShape || graphicsInfo) { if (t.isSelectionDialogMode) { return; } if (this.isCellEditMode && !this.handlers.trigger("stopCellEditing")) { return; } t.isShapeAction = true; t.clickCounter.mouseDownEvent(coord.x, coord.y, event.button); event.ClickCount = t.clickCounter.clickCount; if (event.ClickCount == 2) { t.isDblClickInMouseDown = true; } t.handlers.trigger("graphicObjectMouseDown", event, coord.x, coord.y); t.handlers.trigger("updateSelectionShape", true); return; } else { t.isShapeAction = false; } if (2 === event.detail) { if (this.mouseDownLastCord && coord.x === this.mouseDownLastCord.x && coord.y === this.mouseDownLastCord.y && 0 === event.button) { this.isDblClickInMouseDown = true; this.isDoBrowserDblClick = true; this.doMouseDblClick(event, false); this.mouseDownLastCord = null; return; } } if (! (AscBrowser.isIE || AscBrowser.isOpera)) { if (event.preventDefault) { event.preventDefault(); } else { event.returnValue = false; } } if (!this.targetInfo) { this.handlers.trigger("updateWorksheet", this.element, coord.x, coord.y, false, function (info) { t.targetInfo = info; }); } this.mouseDownLastCord = coord; t.hasFocus = true; if (!t.isCellEditMode) { if (event.shiftKey) { t.isSelectMode = true; t._changeSelection(event, true); return; } if (t.targetInfo) { if (t.targetInfo.target === c_oTargetType.ColumnResize || t.targetInfo.target === c_oTargetType.RowResize) { t.isResizeMode = true; t._resizeElement(event); return; } else { if (t.targetInfo && t.targetInfo.target === c_oTargetType.FillHandle && false === this.settings.isViewerMode) { this.isFillHandleMode = true; t._changeFillHandle(event); return; } else { if (t.targetInfo && t.targetInfo.target === c_oTargetType.MoveRange && false === this.settings.isViewerMode) { this.isMoveRangeMode = true; t._moveRangeHandle(event); return; } else { if (t.targetInfo && t.targetInfo.target === c_oTargetType.FilterObject) { t._autoFiltersClick(t.targetInfo.idFilter); return; } else { if (t.targetInfo && undefined !== t.targetInfo.commentIndexes && false === this.settings.isViewerMode) { t._commentCellClick(event); } else { if (t.targetInfo && t.targetInfo.target === c_oTargetType.MoveResizeRange && false === this.settings.isViewerMode) { this.isMoveResizeRange = true; t._moveResizeRangeHandle(event, t.targetInfo); return; } else { if (t.targetInfo && (t.targetInfo.target === c_oTargetType.FrozenAnchorV || t.targetInfo.target === c_oTargetType.FrozenAnchorH) && false === this.settings.isViewerMode) { this.frozenAnchorMode = t.targetInfo.target; t._moveFrozenAnchorHandle(event, this.frozenAnchorMode); return; } } } } } } } } } else { if (!t.isFormulaEditMode) { if (!t.handlers.trigger("stopCellEditing")) { return; } } else { if (event.shiftKey) { t.isSelectMode = true; t._changeSelection(event, true); return; } else { if (t.isFormulaEditMode) { if (t.targetInfo && t.targetInfo.target === c_oTargetType.MoveResizeRange && false === this.settings.isViewerMode) { this.isMoveResizeRange = true; t._moveResizeRangeHandle(event, t.targetInfo); return; } else { if (false === t.handlers.trigger("canEnterCellRange")) { if (!t.handlers.trigger("stopCellEditing")) { return; } } } } t.isSelectMode = true; t.handlers.trigger("changeSelection", true, coord.x, coord.y, true, true, function (d) { t.scroll(d); if (t.isFormulaEditMode) { t.handlers.trigger("enterCellRange"); } else { if (t.isCellEditMode) { if (!t.handlers.trigger("stopCellEditing")) { return; } } } }); return; } } } if (2 === event.button) { t.handlers.trigger("changeSelectionRightClick", coord.x, coord.y); } else { if (t.targetInfo && t.targetInfo.target === c_oTargetType.FillHandle && false === this.settings.isViewerMode) { t.isFillHandleMode = true; t._changeFillHandle(event); } else { t.isSelectMode = true; t.handlers.trigger("changeSelection", true, coord.x, coord.y, true, true); } } }; asc_CEventsController.prototype._onMouseUp = function (event) { if (2 === event.button) { this.handlers.trigger("onContextMenu", event); return true; } var coord = this._getCoordinates(event); event.isLocked = this.isMousePressed = false; if (this.isShapeAction) { event.ClickCount = this.clickCounter.clickCount; this.handlers.trigger("graphicObjectMouseUp", event, coord.x, coord.y); this._changeSelectionDone(event); if (asc["editor"].isStartAddShape) { event.preventDefault && event.preventDefault(); event.stopPropagation && event.stopPropagation(); } return true; } if (this.isSelectMode) { this.isSelectMode = false; this._changeSelectionDone(event); } if (this.isResizeMode) { this.isResizeMode = false; this._resizeElementDone(event); } if (this.isFillHandleMode) { this.isFillHandleMode = false; this._changeFillHandleDone(event); } if (this.isMoveRangeMode) { this.isMoveRangeMode = false; this._moveRangeHandleDone(event); } if (this.isMoveResizeRange) { this.isMoveResizeRange = false; this._moveResizeRangeHandleDone(event, this.targetInfo); return true; } if (this.frozenAnchorMode) { this._moveFrozenAnchorHandleDone(event, this.frozenAnchorMode); this.frozenAnchorMode = false; } this.showCellEditorCursor(); }; asc_CEventsController.prototype._onMouseMove = function (event) { var t = this; var ctrlKey = event.metaKey || event.ctrlKey; var coord = t._getCoordinates(event); t.hasCursor = true; var graphicsInfo = t.handlers.trigger("getGraphicsInfo", coord.x, coord.y); if (graphicsInfo) { this.clickCounter.mouseMoveEvent(coord.x, coord.y); } if (t.isSelectMode) { t._changeSelection(event, true); return true; } if (t.isResizeMode) { t._resizeElement(event); this.isResizeModeMove = true; return true; } if (t.isFillHandleMode) { t._changeFillHandle(event); return true; } if (t.isMoveRangeMode) { event.currentTarget.style.cursor = ctrlKey ? "copy" : "move"; t._moveRangeHandle(event); return true; } if (t.isMoveResizeRange) { t._moveResizeRangeHandle(event, t.targetInfo); return true; } if (t.frozenAnchorMode) { t._moveFrozenAnchorHandle(event, this.frozenAnchorMode); return true; } if (t.isShapeAction || graphicsInfo) { event.isLocked = t.isMousePressed; t.handlers.trigger("graphicObjectMouseMove", event, coord.x, coord.y); t.handlers.trigger("updateWorksheet", t.element, coord.x, coord.y, ctrlKey, function (info) { t.targetInfo = info; }); return true; } t.handlers.trigger("updateWorksheet", t.element, coord.x, coord.y, ctrlKey, function (info) { t.targetInfo = info; }); return true; }; asc_CEventsController.prototype._onMouseLeave = function (event) { var t = this; this.hasCursor = false; if (!this.isSelectMode && !this.isResizeMode && !this.isMoveResizeRange) { this.targetInfo = undefined; this.handlers.trigger("updateWorksheet", this.element); } if (this.isMoveRangeMode) { t.moveRangeTimerId = window.setTimeout(function () { t._moveRangeHandle2(event); }, 0); } if (this.isMoveResizeRange) { t.moveResizeRangeTimerId = window.setTimeout(function () { t._moveResizeRangeHandle2(event); }, 0); } if (this.isFillHandleMode) { t.fillHandleModeTimerId = window.setTimeout(function () { t._changeFillHandle2(event); }, 0); } return true; }; asc_CEventsController.prototype._onMouseWheel = function (event) { if (this.isFillHandleMode || this.isMoveRangeMode || this.isMoveResizeRange) { return true; } var delta = 0; if (undefined !== event.wheelDelta && 0 !== event.wheelDelta) { delta = -1 * event.wheelDelta / 40; } else { if (undefined != event.detail && 0 !== event.detail) { delta = event.detail; } else { if (undefined != event.deltaY && 0 !== event.deltaY) { delta = event.deltaY; } } } delta /= 3; var self = this; delta *= event.shiftKey ? 1 : this.settings.wheelScrollLines; this.handlers.trigger("updateWorksheet", this.element, undefined, undefined, undefined, function () { event.shiftKey ? self.scrollHorizontal(delta, event) : self.scrollVertical(delta, event); self._onMouseMove(event); }); return true; }; asc_CEventsController.prototype._onMouseDblClick = function (event) { if (this.handlers.trigger("isGlobalLockEditCell")) { return false; } if (false === this.isDblClickInMouseDown) { return this.doMouseDblClick(event, false); } this.isDblClickInMouseDown = false; this.showCellEditorCursor(); return true; }; asc_CEventsController.prototype._getCoordinates = function (event) { if (event.coord) { return event.coord; } var offs = $(this.element).offset(); var x = event.pageX - offs.left; var y = event.pageY - offs.top; if (AscBrowser.isRetina) { x <<= 1; y <<= 1; } return { x: x, y: y }; }; asc_CEventsController.prototype._onTouchStart = function (event) { this.view.MobileTouchManager.onTouchStart(event); }; asc_CEventsController.prototype._onTouchMove = function (event) { this.view.MobileTouchManager.onTouchMove(event); }; asc_CEventsController.prototype._onTouchEnd = function (event) { this.view.MobileTouchManager.onTouchEnd(event); }; window["Asc"]["asc_CEventsController"] = window["Asc"].asc_CEventsController = asc_CEventsController; })(jQuery, window);