Commit 7156771d authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Правка бага http://bugzserver/show_bug.cgi?id=24021

На mac не обрабатывался metaKey в эвенте.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@55895 954022d7-b5bf-4e40-9824-e11837661b57
parent f48d9b27
...@@ -4908,7 +4908,7 @@ function DrawingObjects() { ...@@ -4908,7 +4908,7 @@ function DrawingObjects() {
_this.graphicObjectKeyPress = function(e) { _this.graphicObjectKeyPress = function(e) {
e.KeyCode = e.keyCode; e.KeyCode = e.keyCode;
e.CtrlKey = e.ctrlKey; e.CtrlKey = e.metaKey || e.ctrlKey;
e.AltKey = e.altKey; e.AltKey = e.altKey;
e.ShiftKey = e.shiftKey; e.ShiftKey = e.shiftKey;
e.Which = e.which; e.Which = e.which;
......
...@@ -2746,6 +2746,8 @@ DrawingObjectsController.prototype = ...@@ -2746,6 +2746,8 @@ DrawingObjectsController.prototype =
onKeyDown: function(e) onKeyDown: function(e)
{ {
// TODO!!! var ctrlKey = e.metaKey || e.ctrlKey
var drawingObjectsController = this; var drawingObjectsController = this;
var bRetValue = false; var bRetValue = false;
var state = drawingObjectsController.curState; var state = drawingObjectsController.curState;
......
...@@ -1638,9 +1638,10 @@ ...@@ -1638,9 +1638,10 @@
// Event handlers // Event handlers
/** @param event {jQuery.Event} */ /** @param event {KeyboardEvent} */
CellEditor.prototype._onWindowKeyDown = function (event) { CellEditor.prototype._onWindowKeyDown = function (event) {
var t = this, kind = undefined, hieroglyph = false; var t = this, kind = undefined, hieroglyph = false;
var ctrlKey = event.metaKey || event.ctrlKey;
if (!t.isOpened || !t.enableKeyEvents) {return true;} if (!t.isOpened || !t.enableKeyEvents) {return true;}
...@@ -1688,27 +1689,27 @@ ...@@ -1688,27 +1689,27 @@
case 8: // "backspace" case 8: // "backspace"
if (hieroglyph) {t._syncEditors();} if (hieroglyph) {t._syncEditors();}
t._removeChars(event.ctrlKey ? kPrevWord : kPrevChar); t._removeChars(ctrlKey ? kPrevWord : kPrevChar);
return false; return false;
case 46: // "del" case 46: // "del"
if (!t.hasFocus) {t.setFocus(true);} if (!t.hasFocus) {t.setFocus(true);}
if (hieroglyph) {t._syncEditors();} if (hieroglyph) {t._syncEditors();}
t.skipTLUpdate = true; t.skipTLUpdate = true;
t._removeChars(event.ctrlKey ? kNextWord : kNextChar); t._removeChars(ctrlKey ? kNextWord : kNextChar);
return true; return true;
case 37: // "left" case 37: // "left"
if (!t.hasFocus) {break;} if (!t.hasFocus) {break;}
if (hieroglyph) {t._syncEditors();} if (hieroglyph) {t._syncEditors();}
kind = event.ctrlKey ? kPrevWord : kPrevChar; kind = ctrlKey ? kPrevWord : kPrevChar;
event.shiftKey ? t._selectChars(kind) : t._moveCursor(kind); event.shiftKey ? t._selectChars(kind) : t._moveCursor(kind);
return false; return false;
case 39: // "right" case 39: // "right"
if (!t.hasFocus) {break;} if (!t.hasFocus) {break;}
if (hieroglyph) {t._syncEditors();} if (hieroglyph) {t._syncEditors();}
kind = event.ctrlKey ? kNextWord : kNextChar; kind = ctrlKey ? kNextWord : kNextChar;
event.shiftKey ? t._selectChars(kind) : t._moveCursor(kind); event.shiftKey ? t._selectChars(kind) : t._moveCursor(kind);
return false; return false;
...@@ -1727,19 +1728,19 @@ ...@@ -1727,19 +1728,19 @@
case 35: // "end" case 35: // "end"
if (!t.hasFocus) {break;} if (!t.hasFocus) {break;}
if (hieroglyph) {t._syncEditors();} if (hieroglyph) {t._syncEditors();}
kind = event.ctrlKey ? kEndOfText : kEndOfLine; kind = ctrlKey ? kEndOfText : kEndOfLine;
event.shiftKey ? t._selectChars(kind) : t._moveCursor(kind); event.shiftKey ? t._selectChars(kind) : t._moveCursor(kind);
return false; return false;
case 36: // "home" case 36: // "home"
if (!t.hasFocus) {break;} if (!t.hasFocus) {break;}
if (hieroglyph) {t._syncEditors();} if (hieroglyph) {t._syncEditors();}
kind = event.ctrlKey ? kBeginOfText : kBeginOfLine; kind = ctrlKey ? kBeginOfText : kBeginOfLine;
event.shiftKey ? t._selectChars(kind) : t._moveCursor(kind); event.shiftKey ? t._selectChars(kind) : t._moveCursor(kind);
return false; return false;
case 53: // 5 case 53: // 5
if (event.ctrlKey) { if (ctrlKey) {
if (!t.hasFocus) {t.setFocus(true);} if (!t.hasFocus) {t.setFocus(true);}
// Отключим стандартную обработку браузера нажатия ctlr + 5 // Отключим стандартную обработку браузера нажатия ctlr + 5
event.stopPropagation(); event.stopPropagation();
...@@ -1751,7 +1752,7 @@ ...@@ -1751,7 +1752,7 @@
break; break;
case 65: // A case 65: // A
if (event.ctrlKey) { if (ctrlKey) {
if (!t.hasFocus) {t.setFocus(true);} if (!t.hasFocus) {t.setFocus(true);}
// Отключим стандартную обработку браузера нажатия ctlr + a // Отключим стандартную обработку браузера нажатия ctlr + a
if (!t.isTopLineActive) { if (!t.isTopLineActive) {
...@@ -1765,7 +1766,7 @@ ...@@ -1765,7 +1766,7 @@
break; break;
case 66: // B case 66: // B
if (event.ctrlKey) { if (ctrlKey) {
if (!t.hasFocus) {t.setFocus(true);} if (!t.hasFocus) {t.setFocus(true);}
// Отключим стандартную обработку браузера нажатия ctlr + b // Отключим стандартную обработку браузера нажатия ctlr + b
event.stopPropagation(); event.stopPropagation();
...@@ -1777,7 +1778,7 @@ ...@@ -1777,7 +1778,7 @@
break; break;
case 73: // I case 73: // I
if (event.ctrlKey) { if (ctrlKey) {
if (!t.hasFocus) {t.setFocus(true);} if (!t.hasFocus) {t.setFocus(true);}
// Отключим стандартную обработку браузера нажатия ctlr + i // Отключим стандартную обработку браузера нажатия ctlr + i
event.stopPropagation(); event.stopPropagation();
...@@ -1789,7 +1790,7 @@ ...@@ -1789,7 +1790,7 @@
break; break;
/*case 83: // S /*case 83: // S
if (event.ctrlKey) { if (ctrlKey) {
if (!t.hasFocus) {t.setFocus(true);} if (!t.hasFocus) {t.setFocus(true);}
if (hieroglyph) {t._syncEditors();} if (hieroglyph) {t._syncEditors();}
...@@ -1800,7 +1801,7 @@ ...@@ -1800,7 +1801,7 @@
break;*/ break;*/
case 85: // U case 85: // U
if (event.ctrlKey) { if (ctrlKey) {
if (!t.hasFocus) {t.setFocus(true);} if (!t.hasFocus) {t.setFocus(true);}
// Отключим стандартную обработку браузера нажатия ctlr + u // Отключим стандартную обработку браузера нажатия ctlr + u
event.stopPropagation(); event.stopPropagation();
...@@ -1820,7 +1821,7 @@ ...@@ -1820,7 +1821,7 @@
return false; return false;
case 80: // print Ctrl + p case 80: // print Ctrl + p
if (event.ctrlKey) { if (ctrlKey) {
event.stopPropagation(); event.stopPropagation();
event.preventDefault(); event.preventDefault();
return false; return false;
...@@ -1830,7 +1831,7 @@ ...@@ -1830,7 +1831,7 @@
case 67: // copy Ctrl + c case 67: // copy Ctrl + c
case 86: // paste Ctrl + v case 86: // paste Ctrl + v
case 88: // redo Ctrl + x case 88: // redo Ctrl + x
if (event.ctrlKey) { if (ctrlKey) {
if (!t.hasFocus) {t.setFocus(true);} if (!t.hasFocus) {t.setFocus(true);}
// возвращение фокуса в top line // возвращение фокуса в top line
if (t.isTopLineActive) { if (t.isTopLineActive) {
...@@ -1850,7 +1851,7 @@ ...@@ -1850,7 +1851,7 @@
case 89: // ctrl + y case 89: // ctrl + y
case 90: // ctrl + z case 90: // ctrl + z
if (event.ctrlKey) { if (ctrlKey) {
if (!t.hasFocus) {t.setFocus(true);} if (!t.hasFocus) {t.setFocus(true);}
event.which === 90 ? t.undo() : t.redo(); event.which === 90 ? t.undo() : t.redo();
return false; return false;
...@@ -1871,13 +1872,14 @@ ...@@ -1871,13 +1872,14 @@
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {KeyboardEvent} */
CellEditor.prototype._onWindowKeyPress = function (event) { CellEditor.prototype._onWindowKeyPress = function (event) {
var t = this; var t = this;
var ctrlKey = event.metaKey || event.ctrlKey;
if (!t.isOpened || !t.enableKeyEvents) {return true;} if (!t.isOpened || !t.enableKeyEvents) {return true;}
if (t.skipKeyPress || event.which < 32 || event.altKey || event.ctrlKey) { if (t.skipKeyPress || event.which < 32 || event.altKey || ctrlKey) {
t.skipKeyPress = true; t.skipKeyPress = true;
return true; return true;
} }
...@@ -1915,7 +1917,7 @@ ...@@ -1915,7 +1917,7 @@
return t.isTopLineActive ? true : false; // prevent event bubbling return t.isTopLineActive ? true : false; // prevent event bubbling
}; };
/** @param event {jQuery.Event} */ /** @param event {KeyboardEvent} */
CellEditor.prototype._onWindowKeyUp = function (event) { CellEditor.prototype._onWindowKeyUp = function (event) {
var t = this; var t = this;
...@@ -1925,20 +1927,20 @@ ...@@ -1925,20 +1927,20 @@
} }
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
CellEditor.prototype._onWindowMouseUp = function (event) { CellEditor.prototype._onWindowMouseUp = function (event) {
this.isSelectMode = false; this.isSelectMode = false;
if (this.callTopLineMouseup) {this._topLineMouseUp();} if (this.callTopLineMouseup) {this._topLineMouseUp();}
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
CellEditor.prototype._onWindowMouseMove = function (event) { CellEditor.prototype._onWindowMouseMove = function (event) {
if (this.isSelectMode && !this.hasCursor) {this._changeSelection(this._getCoordinates(event));} if (this.isSelectMode && !this.hasCursor) {this._changeSelection(this._getCoordinates(event));}
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
CellEditor.prototype._onMouseDown = function (event) { CellEditor.prototype._onMouseDown = function (event) {
var t = this; var t = this;
var coord = t._getCoordinates(event); var coord = t._getCoordinates(event);
...@@ -1962,13 +1964,13 @@ ...@@ -1962,13 +1964,13 @@
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
CellEditor.prototype._onMouseUp = function (event) { CellEditor.prototype._onMouseUp = function (event) {
this.isSelectMode = false; this.isSelectMode = false;
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
CellEditor.prototype._onMouseMove = function (event) { CellEditor.prototype._onMouseMove = function (event) {
this.hasCursor = true; this.hasCursor = true;
if (this.isSelectMode) { if (this.isSelectMode) {
...@@ -1977,13 +1979,13 @@ ...@@ -1977,13 +1979,13 @@
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
CellEditor.prototype._onMouseLeave = function (event) { CellEditor.prototype._onMouseLeave = function (event) {
this.hasCursor = false; this.hasCursor = false;
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
CellEditor.prototype._onMouseDblClick = function (event) { CellEditor.prototype._onMouseDblClick = function (event) {
var t = this; var t = this;
// Окончание слова // Окончание слова
...@@ -2014,7 +2016,7 @@ ...@@ -2014,7 +2016,7 @@
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
CellEditor.prototype._getCoordinates = function (event) { CellEditor.prototype._getCoordinates = function (event) {
var t = this; var t = this;
var offs = $(t.canvasOverlay).offset(); var offs = $(t.canvasOverlay).offset();
......
...@@ -246,7 +246,7 @@ DrawingObjectsController.prototype.checkSelectedObjectsAndFireCallback = functio ...@@ -246,7 +246,7 @@ DrawingObjectsController.prototype.checkSelectedObjectsAndFireCallback = functio
DrawingObjectsController.prototype.onMouseDown = function(e, x, y) DrawingObjectsController.prototype.onMouseDown = function(e, x, y)
{ {
e.ShiftKey = e.shiftKey; e.ShiftKey = e.shiftKey;
e.CtrlKey = e.ctrlKey; e.CtrlKey = e.metaKey || e.ctrlKey;
return this.curState.onMouseDown(e, x, y, 0); return this.curState.onMouseDown(e, x, y, 0);
}; };
...@@ -256,7 +256,7 @@ DrawingObjectsController.prototype.OnMouseDown = DrawingObjectsController.protot ...@@ -256,7 +256,7 @@ DrawingObjectsController.prototype.OnMouseDown = DrawingObjectsController.protot
DrawingObjectsController.prototype.onMouseMove = function(e, x, y) DrawingObjectsController.prototype.onMouseMove = function(e, x, y)
{ {
e.ShiftKey = e.shiftKey; e.ShiftKey = e.shiftKey;
e.CtrlKey = e.ctrlKey; e.CtrlKey = e.metaKey || e.ctrlKey;
this.curState.onMouseMove(e, x, y, 0); this.curState.onMouseMove(e, x, y, 0);
}; };
DrawingObjectsController.prototype.OnMouseMove = DrawingObjectsController.prototype.onMouseMove; DrawingObjectsController.prototype.OnMouseMove = DrawingObjectsController.prototype.onMouseMove;
...@@ -265,7 +265,7 @@ DrawingObjectsController.prototype.OnMouseMove = DrawingObjectsController.protot ...@@ -265,7 +265,7 @@ DrawingObjectsController.prototype.OnMouseMove = DrawingObjectsController.protot
DrawingObjectsController.prototype.onMouseUp = function(e, x, y) DrawingObjectsController.prototype.onMouseUp = function(e, x, y)
{ {
e.ShiftKey = e.shiftKey; e.ShiftKey = e.shiftKey;
e.CtrlKey = e.ctrlKey; e.CtrlKey = e.metaKey || e.ctrlKey;
this.curState.onMouseUp(e, x, y, 0); this.curState.onMouseUp(e, x, y, 0);
}; };
DrawingObjectsController.prototype.OnMouseUp = DrawingObjectsController.prototype.onMouseUp; DrawingObjectsController.prototype.OnMouseUp = DrawingObjectsController.prototype.onMouseUp;
......
...@@ -101,7 +101,6 @@ ...@@ -101,7 +101,6 @@
return this; return this;
} }
/** /**
* @param {WorkbookView} view * @param {WorkbookView} view
* @param {Element} widgetElem * @param {Element} widgetElem
...@@ -221,10 +220,7 @@ ...@@ -221,10 +220,7 @@
this.isFormulaEditMode = !!isFormulaEditMode; this.isFormulaEditMode = !!isFormulaEditMode;
}; };
/** /** @param {Boolean} isSelectionDialogMode */
*
* @param {Boolean} isSelectionDialogMode
*/
asc_CEventsController.prototype.setSelectionDialogMode = function (isSelectionDialogMode) { asc_CEventsController.prototype.setSelectionDialogMode = function (isSelectionDialogMode) {
this.isSelectionDialogMode = isSelectionDialogMode; this.isSelectionDialogMode = isSelectionDialogMode;
}; };
...@@ -261,7 +257,10 @@ ...@@ -261,7 +257,10 @@
return this; return this;
}; };
/** @param delta {Number} */ /**
* @param delta {Number}
* @param event {MouseEvent}
*/
asc_CEventsController.prototype.scrollVertical = function (delta, event) { asc_CEventsController.prototype.scrollVertical = function (delta, event) {
if( event && event.preventDefault ) if( event && event.preventDefault )
event.preventDefault(); event.preventDefault();
...@@ -269,9 +268,12 @@ ...@@ -269,9 +268,12 @@
return true; return true;
}; };
/** @param delta {Number} */ /**
* @param delta {Number}
* @param event {MouseEvent}
*/
asc_CEventsController.prototype.scrollHorizontal = function (delta, event) { asc_CEventsController.prototype.scrollHorizontal = function (delta, event) {
if( event && event.preventDefault ) if (event && event.preventDefault)
event.preventDefault(); event.preventDefault();
this.hsbApi.scrollByX(this.settings.hscrollStep * delta); this.hsbApi.scrollByX(this.settings.hscrollStep * delta);
return true; return true;
...@@ -280,6 +282,7 @@ ...@@ -280,6 +282,7 @@
// Будем делать dblClick как в Excel // Будем делать dblClick как в Excel
asc_CEventsController.prototype.doMouseDblClick = function (event, isHideCursor) { asc_CEventsController.prototype.doMouseDblClick = function (event, isHideCursor) {
var t = this; var t = this;
var ctrlKey = event.metaKey || event.ctrlKey;
// Для формулы не нужно выходить из редактирования ячейки // Для формулы не нужно выходить из редактирования ячейки
if (t.settings.isViewerMode || t.isFormulaEditMode || t.isSelectionDialogMode) {return true;} if (t.settings.isViewerMode || t.isFormulaEditMode || t.isSelectionDialogMode) {return true;}
...@@ -299,7 +302,7 @@ ...@@ -299,7 +302,7 @@
var coord = t._getCoordinates(event); var coord = t._getCoordinates(event);
t.handlers.trigger("mouseDblClick", coord.x, coord.y, isHideCursor, function () { t.handlers.trigger("mouseDblClick", coord.x, coord.y, isHideCursor, function () {
// Мы изменяли размеры колонки/строки, не редактируем ячейку. Обновим состояние курсора // Мы изменяли размеры колонки/строки, не редактируем ячейку. Обновим состояние курсора
t.handlers.trigger("updateWorksheet", t.element, coord.x, coord.y, event.ctrlKey, t.handlers.trigger("updateWorksheet", t.element, coord.x, coord.y, ctrlKey,
function (info) {t.targetInfo = info;}); function (info) {t.targetInfo = info;});
}); });
}, 100); }, 100);
...@@ -385,7 +388,8 @@ ...@@ -385,7 +388,8 @@
}; };
/** /**
* @param event {jQuery.Event} * @param event {MouseEvent}
* @param isSelectMode {Boolean}
* @param callback {Function} * @param callback {Function}
*/ */
asc_CEventsController.prototype._changeSelection = function (event, isSelectMode, callback) { asc_CEventsController.prototype._changeSelection = function (event, isSelectMode, callback) {
...@@ -405,24 +409,20 @@ ...@@ -405,24 +409,20 @@
if (d.deltaX) {t.scrollHorizontal(d.deltaX);} if (d.deltaX) {t.scrollHorizontal(d.deltaX);}
if (d.deltaY) {t.scrollVertical(d.deltaY);} if (d.deltaY) {t.scrollVertical(d.deltaY);}
if (t.isFormulaEditMode) { if (t.isFormulaEditMode)
t.handlers.trigger("enterCellRange"); t.handlers.trigger("enterCellRange");
} else if (t.isCellEditMode) { else if (t.isCellEditMode)
if (!t.handlers.trigger("stopCellEditing")) {return;} if (!t.handlers.trigger("stopCellEditing")) {return;}
}
asc_applyFunction(callback); asc_applyFunction(callback);
}); });
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
asc_CEventsController.prototype._changeSelection2 = function (event) { asc_CEventsController.prototype._changeSelection2 = function (event) {
var t = this; var t = this;
var fn = function () { var fn = function () { t._changeSelection2(event); };
t._changeSelection2(event);
};
var callback = function () { var callback = function () {
if (t.isSelectMode && !t.hasCursor) { if (t.isSelectMode && !t.hasCursor) {
t.scrollTimerId = window.setTimeout(fn, t.settings.scrollTimeout); t.scrollTimerId = window.setTimeout(fn, t.settings.scrollTimeout);
...@@ -437,7 +437,7 @@ ...@@ -437,7 +437,7 @@
}, 0); }, 0);
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
asc_CEventsController.prototype._moveRangeHandle2 = function (event) { asc_CEventsController.prototype._moveRangeHandle2 = function (event) {
var t = this; var t = this;
...@@ -459,7 +459,7 @@ ...@@ -459,7 +459,7 @@
}, 0); }, 0);
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
asc_CEventsController.prototype._moveResizeRangeHandle2 = function (event) { asc_CEventsController.prototype._moveResizeRangeHandle2 = function (event) {
var t = this; var t = this;
...@@ -481,30 +481,37 @@ ...@@ -481,30 +481,37 @@
}, 0); }, 0);
}; };
// Окончание выделения /**
* Окончание выделения
* @param event {MouseEvent}
*/
asc_CEventsController.prototype._changeSelectionDone = function (event) { asc_CEventsController.prototype._changeSelectionDone = function (event) {
var coord = this._getCoordinates(event); var coord = this._getCoordinates(event);
if (false === event.ctrlKey) { var ctrlKey = event.metaKey || event.ctrlKey;
if (false === ctrlKey) {
coord.x = -1; coord.x = -1;
coord.y = -1; coord.y = -1;
} }
this.handlers.trigger("changeSelectionDone", coord.x, coord.y); this.handlers.trigger("changeSelectionDone", coord.x, coord.y);
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
asc_CEventsController.prototype._resizeElement = function (event) { asc_CEventsController.prototype._resizeElement = function (event) {
var coord = this._getCoordinates(event); var coord = this._getCoordinates(event);
this.handlers.trigger("resizeElement", this.targetInfo, coord.x, coord.y); this.handlers.trigger("resizeElement", this.targetInfo, coord.x, coord.y);
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
asc_CEventsController.prototype._resizeElementDone = function (event) { asc_CEventsController.prototype._resizeElementDone = function (event) {
var coord = this._getCoordinates(event); var coord = this._getCoordinates(event);
this.handlers.trigger("resizeElementDone", this.targetInfo, coord.x, coord.y, this.isResizeModeMove); this.handlers.trigger("resizeElementDone", this.targetInfo, coord.x, coord.y, this.isResizeModeMove);
this.isResizeModeMove = false; this.isResizeModeMove = false;
}; };
/** @param event {jQuery.Event} */ /**
* @param event {MouseEvent}
* @param callback {Function}
*/
asc_CEventsController.prototype._changeFillHandle = function (event, callback) { asc_CEventsController.prototype._changeFillHandle = function (event, callback) {
var t = this; var t = this;
// Обновляемся в режиме автозаполнения // Обновляемся в режиме автозаполнения
...@@ -522,7 +529,8 @@ ...@@ -522,7 +529,8 @@
}); });
}; };
asc_CEventsController.prototype._changeFillHandle2 = function (event){ /** @param event {MouseEvent} */
asc_CEventsController.prototype._changeFillHandle2 = function (event) {
var t = this; var t = this;
var fn = function () { var fn = function () {
...@@ -543,15 +551,17 @@ ...@@ -543,15 +551,17 @@
}, 0); }, 0);
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
asc_CEventsController.prototype._changeFillHandleDone = function (event) { asc_CEventsController.prototype._changeFillHandleDone = function (event) {
// Закончили автозаполнение, пересчитаем // Закончили автозаполнение, пересчитаем
var coord = this._getCoordinates(event); var coord = this._getCoordinates(event);
var ctrlPress = event.ctrlKey; this.handlers.trigger("changeFillHandleDone", coord.x, coord.y, event.metaKey || event.ctrlKey);
this.handlers.trigger("changeFillHandleDone", coord.x, coord.y, ctrlPress);
}; };
/** @param event {jQuery.Event} */ /**
* @param event {MouseEvent}
* @param callback {Function}
*/
asc_CEventsController.prototype._moveRangeHandle = function (event, callback) { asc_CEventsController.prototype._moveRangeHandle = function (event, callback) {
var t = this; var t = this;
// Обновляемся в режиме перемещения диапазона // Обновляемся в режиме перемещения диапазона
...@@ -566,18 +576,23 @@ ...@@ -566,18 +576,23 @@
t.scrollVertical(d.deltaY); t.scrollVertical(d.deltaY);
} }
asc_applyFunction(callback); asc_applyFunction(callback);
}, }, event.metaKey || event.ctrlKey);
event.ctrlKey);
}; };
/** @param event {jQuery.Event} */ /**
* @param event {MouseEvent}
* @param targetInfo
*/
asc_CEventsController.prototype._moveFrozenAnchorHandle = function (event, targetInfo) { asc_CEventsController.prototype._moveFrozenAnchorHandle = function (event, targetInfo) {
var t = this; var t = this;
var coord = t._getCoordinates(event); var coord = t._getCoordinates(event);
t.handlers.trigger("moveFrozenAnchorHandle", coord.x, coord.y, targetInfo); t.handlers.trigger("moveFrozenAnchorHandle", coord.x, coord.y, targetInfo);
}; };
/** @param event {jQuery.Event} */ /**
* @param event {MouseEvent}
* @param targetInfo
*/
asc_CEventsController.prototype._moveFrozenAnchorHandleDone = function (event, targetInfo) { asc_CEventsController.prototype._moveFrozenAnchorHandleDone = function (event, targetInfo) {
// Закрепляем область // Закрепляем область
var t = this; var t = this;
...@@ -585,7 +600,11 @@ ...@@ -585,7 +600,11 @@
t.handlers.trigger("moveFrozenAnchorHandleDone", coord.x, coord.y, targetInfo); t.handlers.trigger("moveFrozenAnchorHandleDone", coord.x, coord.y, targetInfo);
}; };
/** @param event {jQuery.Event} */ /**
* @param event {MouseEvent}
* @param target
* @param callback {Function}
*/
asc_CEventsController.prototype._moveResizeRangeHandle = function (event, target, callback) { asc_CEventsController.prototype._moveResizeRangeHandle = function (event, target, callback) {
var t = this; var t = this;
// Обновляемся в режиме перемещения диапазона // Обновляемся в режиме перемещения диапазона
...@@ -613,10 +632,10 @@ ...@@ -613,10 +632,10 @@
this.handlers.trigger("commentCellClick", coord.x, coord.y); this.handlers.trigger("commentCellClick", coord.x, coord.y);
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
asc_CEventsController.prototype._moveRangeHandleDone = function (event) { asc_CEventsController.prototype._moveRangeHandleDone = function (event) {
// Закончили перемещение диапазона, пересчитаем // Закончили перемещение диапазона, пересчитаем
this.handlers.trigger("moveRangeHandleDone",event.ctrlKey); this.handlers.trigger("moveRangeHandleDone", event.metaKey || event.ctrlKey);
}; };
asc_CEventsController.prototype._moveResizeRangeHandleDone = function (event, target) { asc_CEventsController.prototype._moveResizeRangeHandleDone = function (event, target) {
...@@ -631,16 +650,14 @@ ...@@ -631,16 +650,14 @@
this.resizeTimerId = window.setTimeout(function () {self.handlers.trigger("resize", event);}, 150); this.resizeTimerId = window.setTimeout(function () {self.handlers.trigger("resize", event);}, 150);
}; };
/** @param event {jQuery.Event} */ /** @param event {KeyboardEvent} */
asc_CEventsController.prototype._onWindowKeyDown = function (event) { asc_CEventsController.prototype._onWindowKeyDown = function (event) {
var t = this, dc = 0, dr = 0, isViewerMode = t.settings.isViewerMode; var t = this, dc = 0, dr = 0, isViewerMode = t.settings.isViewerMode;
var ctrlKey = event.metaKey || event.ctrlKey;
var shiftKey = event.shiftKey;
t.__retval = true; t.__retval = true;
// Mac OS
if ( event.metaKey )
event.ctrlKey = true;
function stop(immediate) { function stop(immediate) {
event.stopPropagation(); event.stopPropagation();
immediate ? event.stopImmediatePropagation() : true; immediate ? event.stopImmediatePropagation() : true;
...@@ -655,11 +672,7 @@ ...@@ -655,11 +672,7 @@
} }
var graphicObjects = t.handlers.trigger("getSelectedGraphicObjects"); var graphicObjects = t.handlers.trigger("getSelectedGraphicObjects");
if ( !t.isMousePressed && graphicObjects.length && t.enableKeyEvents ) { if (!t.isMousePressed && graphicObjects.length && t.enableKeyEvents) {
// Mac OS
if ( event.metaKey )
event.ctrlKey = true;
if (t.handlers.trigger("graphicObjectWindowKeyDown", event)) if (t.handlers.trigger("graphicObjectWindowKeyDown", event))
return true; return true;
} }
...@@ -679,7 +692,7 @@ ...@@ -679,7 +692,7 @@
} }
// Почему-то очень хочется обрабатывать лишние условия в нашем коде, вместо обработки наверху... // Почему-то очень хочется обрабатывать лишние условия в нашем коде, вместо обработки наверху...
if (!t.enableKeyEvents && event.ctrlKey && (80 === event.which/* || 83 === event.which*/)) { if (!t.enableKeyEvents && ctrlKey && (80 === event.which/* || 83 === event.which*/)) {
// Только если отключены эвенты и нажаты Ctrl+S или Ctrl+P мы их обработаем // Только если отключены эвенты и нажаты Ctrl+S или Ctrl+P мы их обработаем
break; break;
} }
...@@ -728,9 +741,9 @@ ...@@ -728,9 +741,9 @@
// Особый случай (возможно движение в выделенной области) // Особый случай (возможно движение в выделенной области)
selectionActivePointChanged = true; selectionActivePointChanged = true;
if (event.shiftKey){ if (shiftKey){
dc = -1; // (shift + tab) - движение по ячейкам влево на 1 столбец dc = -1; // (shift + tab) - движение по ячейкам влево на 1 столбец
event.shiftKey = false; // Сбросим shift, потому что мы не выделяем shiftKey = false; // Сбросим shift, потому что мы не выделяем
} else { } else {
dc = +1; // (tab) - движение по ячейкам вправо на 1 столбец dc = +1; // (tab) - движение по ячейкам вправо на 1 столбец
} }
...@@ -740,9 +753,9 @@ ...@@ -740,9 +753,9 @@
if (t.isCellEditMode) {return true;} if (t.isCellEditMode) {return true;}
// Особый случай (возможно движение в выделенной области) // Особый случай (возможно движение в выделенной области)
selectionActivePointChanged = true; selectionActivePointChanged = true;
if (event.shiftKey) { if (shiftKey) {
dr = -1; // (shift + enter) - движение по ячейкам наверх на 1 строку dr = -1; // (shift + enter) - движение по ячейкам наверх на 1 строку
event.shiftKey = false; // Сбросим shift, потому что мы не выделяем shiftKey = false; // Сбросим shift, потому что мы не выделяем
} else { } else {
dr = +1; // (enter) - движение по ячейкам вниз на 1 строку dr = +1; // (enter) - движение по ячейкам вниз на 1 строку
} }
...@@ -764,7 +777,7 @@ ...@@ -764,7 +777,7 @@
case 32: // Spacebar case 32: // Spacebar
if (t.isCellEditMode) {return true;} if (t.isCellEditMode) {return true;}
// Обработать как обычный текст // Обработать как обычный текст
if (!event.ctrlKey && !event.shiftKey) { if (!ctrlKey && !shiftKey) {
t.skipKeyPress = false; t.skipKeyPress = false;
return true; return true;
} }
...@@ -772,10 +785,10 @@ ...@@ -772,10 +785,10 @@
// Ctrl+Shift+Spacebar, Ctrl+Spacebar, Shift+Spacebar // Ctrl+Shift+Spacebar, Ctrl+Spacebar, Shift+Spacebar
stop(); stop();
// Обработать как спец селект // Обработать как спец селект
if (event.ctrlKey && event.shiftKey) { if (ctrlKey && shiftKey) {
t.handlers.trigger("changeSelection", /*isStartPoint*/true, 0, t.handlers.trigger("changeSelection", /*isStartPoint*/true, 0,
0, /*isCoord*/true, /*isSelectMode*/false); 0, /*isCoord*/true, /*isSelectMode*/false);
} else if (event.ctrlKey) { } else if (ctrlKey) {
t.handlers.trigger("selectColumnsByRange"); t.handlers.trigger("selectColumnsByRange");
} else { } else {
t.handlers.trigger("selectRowsByRange"); t.handlers.trigger("selectRowsByRange");
...@@ -785,7 +798,7 @@ ...@@ -785,7 +798,7 @@
case 33: // PageUp case 33: // PageUp
// Отключим стандартную обработку браузера нажатия PageUp // Отключим стандартную обработку браузера нажатия PageUp
stop(); stop();
if (event.ctrlKey) { if (ctrlKey) {
// Перемещение по листам справа налево // Перемещение по листам справа налево
// В chrome не работает (т.к. там своя обработка на некоторые нажатия вместе с Ctrl // В chrome не работает (т.к. там своя обработка на некоторые нажатия вместе с Ctrl
t.handlers.trigger("showNextPrevWorksheet", -1); t.handlers.trigger("showNextPrevWorksheet", -1);
...@@ -798,7 +811,7 @@ ...@@ -798,7 +811,7 @@
case 34: // PageDown case 34: // PageDown
// Отключим стандартную обработку браузера нажатия PageDown // Отключим стандартную обработку браузера нажатия PageDown
stop(); stop();
if (event.ctrlKey) { if (ctrlKey) {
// Перемещение по листам слева направо // Перемещение по листам слева направо
// В chrome не работает (т.к. там своя обработка на некоторые нажатия вместе с Ctrl // В chrome не работает (т.к. там своя обработка на некоторые нажатия вместе с Ctrl
t.handlers.trigger("showNextPrevWorksheet", +1); t.handlers.trigger("showNextPrevWorksheet", +1);
...@@ -810,7 +823,7 @@ ...@@ -810,7 +823,7 @@
case 37: // left case 37: // left
stop(); // Отключим стандартную обработку браузера нажатия left stop(); // Отключим стандартную обработку браузера нажатия left
dc = event.ctrlKey ? -1.5 : -1; // Движение стрелками (влево-вправо, вверх-вниз) dc = ctrlKey ? -1.5 : -1; // Движение стрелками (влево-вправо, вверх-вниз)
break; break;
case 38: // up case 38: // up
...@@ -818,12 +831,12 @@ ...@@ -818,12 +831,12 @@
// Если у нас открыто меню для подстановки формулы, то мы не обрабатываем верх/вниз // Если у нас открыто меню для подстановки формулы, то мы не обрабатываем верх/вниз
if (t.isCellEditMode && t.handlers.trigger("isPopUpSelectorOpen")) if (t.isCellEditMode && t.handlers.trigger("isPopUpSelectorOpen"))
return t.__retval; return t.__retval;
dr = event.ctrlKey ? -1.5 : -1; // Движение стрелками (влево-вправо, вверх-вниз) dr = ctrlKey ? -1.5 : -1; // Движение стрелками (влево-вправо, вверх-вниз)
break; break;
case 39: // right case 39: // right
stop(); // Отключим стандартную обработку браузера нажатия right stop(); // Отключим стандартную обработку браузера нажатия right
dc = event.ctrlKey ? +1.5 : +1; // Движение стрелками (влево-вправо, вверх-вниз) dc = ctrlKey ? +1.5 : +1; // Движение стрелками (влево-вправо, вверх-вниз)
break; break;
case 40: // down case 40: // down
...@@ -836,19 +849,19 @@ ...@@ -836,19 +849,19 @@
t.handlers.trigger("showAutoComplete"); t.handlers.trigger("showAutoComplete");
return t.__retval; return t.__retval;
} }
dr = event.ctrlKey ? +1.5 : +1; // Движение стрелками (влево-вправо, вверх-вниз) dr = ctrlKey ? +1.5 : +1; // Движение стрелками (влево-вправо, вверх-вниз)
break; break;
case 36: // home case 36: // home
stop(); // Отключим стандартную обработку браузера нажатия home stop(); // Отключим стандартную обработку браузера нажатия home
dc = -2.5; dc = -2.5;
if (event.ctrlKey) {dr = -2.5;} if (ctrlKey) {dr = -2.5;}
break; break;
case 35: // end case 35: // end
stop(); // Отключим стандартную обработку браузера нажатия end stop(); // Отключим стандартную обработку браузера нажатия end
dc = 2.5; dc = 2.5;
if (event.ctrlKey) { if (ctrlKey) {
dr = 2.5; dr = 2.5;
} }
break; break;
...@@ -871,7 +884,7 @@ ...@@ -871,7 +884,7 @@
case 80: // print Ctrl + p case 80: // print Ctrl + p
if (t.isCellEditMode) { stop(); return false; } if (t.isCellEditMode) { stop(); return false; }
if (!event.ctrlKey) { t.skipKeyPress = false; return true; } if (!ctrlKey) { t.skipKeyPress = false; return true; }
// Вызовем обработчик // Вызовем обработчик
if (!t.__handlers) { if (!t.__handlers) {
...@@ -930,7 +943,7 @@ ...@@ -930,7 +943,7 @@
default: default:
// При зажатом Ctrl не вводим символ // При зажатом Ctrl не вводим символ
if (!event.ctrlKey) {t.skipKeyPress = false;} if (!ctrlKey) {t.skipKeyPress = false;}
return true; return true;
} // end of switch } // end of switch
...@@ -956,7 +969,7 @@ ...@@ -956,7 +969,7 @@
} }
} }
t.handlers.trigger("changeSelection", /*isStartPoint*/!event.shiftKey, dc, dr, t.handlers.trigger("changeSelection", /*isStartPoint*/!shiftKey, dc, dr,
/*isCoord*/false, /*isSelectMode*/false, /*isCoord*/false, /*isSelectMode*/false,
function (d) { function (d) {
if (d.deltaX) {t.scrollHorizontal(d.deltaX);} if (d.deltaX) {t.scrollHorizontal(d.deltaX);}
...@@ -974,7 +987,7 @@ ...@@ -974,7 +987,7 @@
return t.__retval; return t.__retval;
}; };
/** @param event {jQuery.Event} */ /** @param event {KeyboardEvent} */
asc_CEventsController.prototype._onWindowKeyPress = function (event) { asc_CEventsController.prototype._onWindowKeyPress = function (event) {
var t = this; var t = this;
...@@ -1022,7 +1035,7 @@ ...@@ -1022,7 +1035,7 @@
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {KeyboardEvent} */
asc_CEventsController.prototype._onWindowKeyUp = function (event) { asc_CEventsController.prototype._onWindowKeyUp = function (event) {
var t = this; var t = this;
...@@ -1038,7 +1051,7 @@ ...@@ -1038,7 +1051,7 @@
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
asc_CEventsController.prototype._onWindowMouseMove = function (event) { asc_CEventsController.prototype._onWindowMouseMove = function (event) {
var t = this; var t = this;
var coord = t._getCoordinates(event); var coord = t._getCoordinates(event);
...@@ -1048,10 +1061,9 @@ ...@@ -1048,10 +1061,9 @@
this.isResizeModeMove = true; this.isResizeModeMove = true;
this._resizeElement(event); this._resizeElement(event);
} }
if( this.hsbApiLockMouse ) if (this.hsbApiLockMouse)
this.hsbApi.mouseDown ? this.hsbApi.evt_mousemove.call(this.hsbApi,event) : false; this.hsbApi.mouseDown ? this.hsbApi.evt_mousemove.call(this.hsbApi,event) : false;
else if (this.vsbApiLockMouse)
else if( this.vsbApiLockMouse )
this.vsbApi.mouseDown ? this.vsbApi.evt_mousemove.call(this.vsbApi,event) : false; this.vsbApi.mouseDown ? this.vsbApi.evt_mousemove.call(this.vsbApi,event) : false;
// Режим установки закреплённых областей // Режим установки закреплённых областей
...@@ -1067,7 +1079,7 @@ ...@@ -1067,7 +1079,7 @@
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
asc_CEventsController.prototype._onWindowMouseUp = function (event) { asc_CEventsController.prototype._onWindowMouseUp = function (event) {
// this.vsbApi.evt_mouseup(event); // this.vsbApi.evt_mouseup(event);
...@@ -1132,7 +1144,11 @@ ...@@ -1132,7 +1144,11 @@
return true; return true;
}; };
/** @param event {jQuery.Event} */ /**
*
* @param x
* @param y
*/
asc_CEventsController.prototype._onWindowMouseUpExternal = function (x, y) { asc_CEventsController.prototype._onWindowMouseUpExternal = function (x, y) {
if (this.isSelectMode) { if (this.isSelectMode) {
this.isSelectMode = false; this.isSelectMode = false;
...@@ -1171,7 +1187,7 @@ ...@@ -1171,7 +1187,7 @@
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
asc_CEventsController.prototype._onWindowMouseLeaveOut = function (event) { asc_CEventsController.prototype._onWindowMouseLeaveOut = function (event) {
// Когда обрабатывать нечего - выходим // Когда обрабатывать нечего - выходим
if (!this.isDoBrowserDblClick) if (!this.isDoBrowserDblClick)
...@@ -1190,7 +1206,7 @@ ...@@ -1190,7 +1206,7 @@
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
asc_CEventsController.prototype._onMouseDown = function (event) { asc_CEventsController.prototype._onMouseDown = function (event) {
var t = this; var t = this;
var coord = t._getCoordinates(event); var coord = t._getCoordinates(event);
...@@ -1213,10 +1229,6 @@ ...@@ -1213,10 +1229,6 @@
t.isShapeAction = true; t.isShapeAction = true;
t.isMouseDownMode = true; t.isMouseDownMode = true;
// Mac OS
if ( event.metaKey )
event.ctrlKey = true;
t.clickCounter.mouseDownEvent(coord.x, coord.y, event.button); t.clickCounter.mouseDownEvent(coord.x, coord.y, event.button);
event.ClickCount = t.clickCounter.clickCount; event.ClickCount = t.clickCounter.clickCount;
...@@ -1346,27 +1358,21 @@ ...@@ -1346,27 +1358,21 @@
// В режиме автозаполнения // В режиме автозаполнения
t.isFillHandleMode = true; t.isFillHandleMode = true;
t._changeFillHandle(event); t._changeFillHandle(event);
return;
} else { } else {
t.isSelectMode = true; t.isSelectMode = true;
t.handlers.trigger("changeSelection", /*isStartPoint*/true, coord.x, t.handlers.trigger("changeSelection", /*isStartPoint*/true, coord.x,
coord.y, /*isCoord*/true, /*isSelectMode*/true); coord.y, /*isCoord*/true, /*isSelectMode*/true);
return;
} }
} }
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
asc_CEventsController.prototype._onMouseUp = function (event) { asc_CEventsController.prototype._onMouseUp = function (event) {
// Shapes // Shapes
var coord = this._getCoordinates(event); var coord = this._getCoordinates(event);
event.isLocked = this.isMousePressed = false; event.isLocked = this.isMousePressed = false;
if ( this.isShapeAction ) { if ( this.isShapeAction ) {
// Mac OS
if ( event.metaKey )
event.ctrlKey = true;
if (this.isCellEditMode) { if (this.isCellEditMode) {
this.handlers.trigger("stopCellEditing"); this.handlers.trigger("stopCellEditing");
this.isCellEditMode = false; this.isCellEditMode = false;
...@@ -1416,9 +1422,10 @@ ...@@ -1416,9 +1422,10 @@
this.showCellEditorCursor(); this.showCellEditorCursor();
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
asc_CEventsController.prototype._onMouseMove = function (event) { asc_CEventsController.prototype._onMouseMove = function (event) {
var t = this; var t = this;
var ctrlKey = event.metaKey || event.ctrlKey;
var coord = t._getCoordinates(event); var coord = t._getCoordinates(event);
event.isLocked = t.isMousePressed; event.isLocked = t.isMousePressed;
...@@ -1448,12 +1455,7 @@ ...@@ -1448,12 +1455,7 @@
// Режим перемещения диапазона // Режим перемещения диапазона
if (t.isMoveRangeMode) { if (t.isMoveRangeMode) {
if(event.ctrlKey){ event.currentTarget.style.cursor = ctrlKey ? "copy" : "move";
event.currentTarget.style.cursor = "copy";
}
else{
event.currentTarget.style.cursor = "move";
}
t._moveRangeHandle(event); t._moveRangeHandle(event);
return true; return true;
} }
...@@ -1471,15 +1473,15 @@ ...@@ -1471,15 +1473,15 @@
if (t.isShapeAction || graphicsInfo) { if (t.isShapeAction || graphicsInfo) {
t.handlers.trigger("graphicObjectMouseMove", event, coord.x, coord.y); t.handlers.trigger("graphicObjectMouseMove", event, coord.x, coord.y);
t.handlers.trigger("updateWorksheet", t.element, coord.x, coord.y, event.ctrlKey, function(info){t.targetInfo = info;}); t.handlers.trigger("updateWorksheet", t.element, coord.x, coord.y, ctrlKey, function(info){t.targetInfo = info;});
return true; return true;
} }
t.handlers.trigger("updateWorksheet", t.element, coord.x, coord.y, event.ctrlKey, function(info){t.targetInfo = info;}); t.handlers.trigger("updateWorksheet", t.element, coord.x, coord.y, ctrlKey, function(info){t.targetInfo = info;});
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {MouseEvent} */
asc_CEventsController.prototype._onMouseLeave = function (event) { asc_CEventsController.prototype._onMouseLeave = function (event) {
var t = this; var t = this;
this.hasCursor = false; this.hasCursor = false;
...@@ -1499,9 +1501,7 @@ ...@@ -1499,9 +1501,7 @@
return true; return true;
}; };
/** /** @param event {MouseEvent} */
* @param event
*/
asc_CEventsController.prototype._onMouseWheel = function (event) { asc_CEventsController.prototype._onMouseWheel = function (event) {
if (this.isFillHandleMode || this.isMoveRangeMode || this.isMoveResizeChartsRange || this.isMoveResizeRange) { if (this.isFillHandleMode || this.isMoveRangeMode || this.isMoveResizeChartsRange || this.isMoveResizeRange) {
return true; return true;
...@@ -1525,7 +1525,7 @@ ...@@ -1525,7 +1525,7 @@
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {KeyboardEvent} */
asc_CEventsController.prototype._onMouseDblClick = function (event) { asc_CEventsController.prototype._onMouseDblClick = function (event) {
if (this.handlers.trigger("isGlobalLockEditCell")) if (this.handlers.trigger("isGlobalLockEditCell"))
return false; return false;
...@@ -1541,7 +1541,7 @@ ...@@ -1541,7 +1541,7 @@
return true; return true;
}; };
/** @param event {jQuery.Event} */ /** @param event {KeyboardEvent} */
asc_CEventsController.prototype._getCoordinates = function (event) { asc_CEventsController.prototype._getCoordinates = function (event) {
var offs = $(this.element).offset(); var offs = $(this.element).offset();
var x = event.pageX - offs.left; var x = event.pageX - offs.left;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment