Files
DocumentServer-v-9.2.0/sdkjs/word/Drawing/mobileTouchManager.js
T
Yajbir Singh f1b860b25c
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

919 lines
27 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2024
*
* 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 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* 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 global_MatrixTransformer = AscCommon.global_MatrixTransformer;
var g_dKoef_mm_to_pix = AscCommon.g_dKoef_mm_to_pix;
var global_mouseEvent = AscCommon.global_mouseEvent;
var global_keyboardEvent = AscCommon.global_keyboardEvent;
/**
* @extends {AscCommon.CMobileTouchManagerBase}
*/
function CMobileTouchManager(_config)
{
this.Name = "word";
AscCommon.CMobileTouchManagerBase.call(this, _config || {});
}
CMobileTouchManager.prototype = Object.create(AscCommon.CMobileTouchManagerBase.prototype);
CMobileTouchManager.prototype.constructor = CMobileTouchManager;
CMobileTouchManager.prototype.Init = function(_api)
{
this.Api = _api;
// создаем делегата. инициализация его - ПОСЛЕ создания iScroll
this.delegate = new AscCommon.CMobileDelegateEditor(this);
var _element = this.delegate.GetScrollerParent();
this.CreateScrollerDiv(_element);
this.iScroll = new window.IScrollMobile(_element, {
scrollbars: true,
mouseWheel: !this.isDesktopMode,
interactiveScrollbars: true,
shrinkScrollbars: 'scale',
fadeScrollbars: true,
scrollX : true,
scroller_id : this.iScrollElement,
bounce : false,
eventsElement : this.eventsElement,
click : false,
useLongTap : true,
transparentIndicators : this.isDesktopMode
});
this.delegate.Init();
if (this.TableTrackEnabled)
this.LoadMobileImages();
};
CMobileTouchManager.prototype.isViewMode = function(isDown)
{
if (this.Api.isViewMode)
return true;
if (this.Api.isRestrictionView())
{
if (this.Api.isRestrictionForms())
{
// на down - проверяем на самом down по координате
if (true === isDown)
return false;
let logicDocument = this.Api.WordControl.m_oLogicDocument;
return logicDocument.IsSelectionLocked(AscCommon.changestype_Paragraph_AddText, null, true, logicDocument.IsFormFieldEditing());
}
return true;
}
return false;
};
CMobileTouchManager.prototype.onTouchStart = function(e)
{
this.IsTouching = true;
AscCommon.g_inputContext.enableVirtualKeyboard();
this.checkPointerMultiTouchAdd(e);
if (this.delegate.IsReader())
return this.onTouchStart_renderer(e);
global_mouseEvent.KoefPixToMM = 5;
AscCommon.check_MouseDownEvent(e.touches ? e.touches[0] : e, true);
global_mouseEvent.KoefPixToMM = 1;
global_mouseEvent.LockMouse();
this.ClearContextMenu();
this.TableCurrentMoveValueMin = null;
this.TableCurrentMoveValueMax = null;
this.MoveAfterDown = false;
this.TimeDown = new Date().getTime();
var bIsKoefPixToMM = false;
var _matrix = this.delegate.GetSelectionTransform();
if (_matrix && global_MatrixTransformer.IsIdentity(_matrix))
_matrix = null;
let touchesCount = e.touches ? e.touches.length : this.getPointerCount();
let isLockedTouch = false;
if (touchesCount > 1)
{
if (AscCommon.MobileTouchMode.None !== this.Mode &&
AscCommon.MobileTouchMode.Scroll !== this.Mode)
{
isLockedTouch = true;
}
}
if (!isLockedTouch)
{
if (!this.CheckSelectTrack())
{
if (!this.CheckTableTrack())
{
bIsKoefPixToMM = this.CheckObjectTrack();
}
}
}
// bug #76224
if (this.isViewMode(true))
{
if (this.Mode === AscCommon.MobileTouchMode.FlowObj ||
this.Mode === AscCommon.MobileTouchMode.InlineObj)
{
this.Mode = AscCommon.MobileTouchMode.None;
}
}
if (!isLockedTouch && this.delegate.IsLockedZoom())
isLockedTouch = true;
if (!isLockedTouch && (2 === touchesCount))
{
this.Mode = AscCommon.MobileTouchMode.Zoom;
}
// если не используем этот моус даун - то уменьшаем количество кликов
switch (this.Mode)
{
case AscCommon.MobileTouchMode.None:
case AscCommon.MobileTouchMode.Scroll:
case AscCommon.MobileTouchMode.InlineObj:
case AscCommon.MobileTouchMode.FlowObj:
case AscCommon.MobileTouchMode.Zoom:
case AscCommon.MobileTouchMode.Cursor:
case AscCommon.MobileTouchMode.TableMove:
{
// так как был уже check, нужно уменьшить количество кликов
if (global_mouseEvent.ClickCount > 0)
global_mouseEvent.ClickCount--;
break;
}
default:
break;
}
var isPreventDefault = false;
switch (this.Mode)
{
case AscCommon.MobileTouchMode.InlineObj:
case AscCommon.MobileTouchMode.FlowObj:
case AscCommon.MobileTouchMode.Zoom:
case AscCommon.MobileTouchMode.TableMove:
{
isPreventDefault = true;
break;
}
case AscCommon.MobileTouchMode.None:
case AscCommon.MobileTouchMode.Scroll:
{
isPreventDefault = this.CheckObjectTrackBefore();
break;
}
default:
{
break;
}
}
let isCheckForm = false;
switch (this.Mode)
{
case AscCommon.MobileTouchMode.None:
{
this.Mode = AscCommon.MobileTouchMode.Scroll;
this.DownPoint = this.delegate.ConvertCoordsFromCursor(global_mouseEvent.X, global_mouseEvent.Y);
this.DownPointOriginal.X = global_mouseEvent.X;
this.DownPointOriginal.Y = global_mouseEvent.Y;
this.delegate.LockScrollStartPos();
this.iScroll._start(e);
isCheckForm = true;
break;
}
case AscCommon.MobileTouchMode.Scroll:
{
// ничего не меняем, просто перемещаем точку
this.DownPoint = this.delegate.ConvertCoordsFromCursor(global_mouseEvent.X, global_mouseEvent.Y);
this.DownPointOriginal.X = global_mouseEvent.X;
this.DownPointOriginal.Y = global_mouseEvent.Y;
this.delegate.LockScrollStartPos();
this.iScroll._start(e);
isCheckForm = true;
break;
}
case AscCommon.MobileTouchMode.Select:
{
var _x1 = this.RectSelect1.x;
var _y1 = this.RectSelect1.y + this.RectSelect1.h / 2;
var _x2 = this.RectSelect2.x + this.RectSelect2.w;
var _y2 = this.RectSelect2.y + this.RectSelect2.h / 2;
this.delegate.LogicDocument.RemoveSelection();
if (1 == this.DragSelect)
{
global_mouseEvent.Button = 0;
if (!_matrix)
{
this.delegate.Logic_OnMouseDown(global_mouseEvent, _x2, _y2, this.PageSelect2);
}
else
{
var __X = _matrix.TransformPointX(_x2, _y2);
var __Y = _matrix.TransformPointY(_x2, _y2);
this.delegate.Logic_OnMouseDown(global_mouseEvent, __X, __Y, this.PageSelect2);
}
var pos1 = this.delegate.ConvertCoordsFromCursor(global_mouseEvent.X, global_mouseEvent.Y);
this.delegate.Logic_OnMouseMove(global_mouseEvent, pos1.X, pos1.Y, pos1.Page);
}
else if (2 == this.DragSelect)
{
global_mouseEvent.Button = 0;
if (!_matrix)
{
this.delegate.Logic_OnMouseDown(global_mouseEvent, _x1, _y1, this.PageSelect1);
}
else
{
var __X = _matrix.TransformPointX (_x1, _y1);
var __Y = _matrix.TransformPointY(_x1, _y1);
this.delegate.Logic_OnMouseDown(global_mouseEvent, __X, __Y, this.PageSelect1);
}
var pos4 = this.delegate.ConvertCoordsFromCursor(global_mouseEvent.X, global_mouseEvent.Y);
this.delegate.Logic_OnMouseMove(global_mouseEvent, pos4.X, pos4.Y, pos4.Page);
}
break;
}
case AscCommon.MobileTouchMode.InlineObj:
{
break;
}
case AscCommon.MobileTouchMode.FlowObj:
{
if (bIsKoefPixToMM)
{
global_mouseEvent.KoefPixToMM = 5;
}
this.delegate.Drawing_OnMouseDown(e.touches ? e.touches[0] : e);
global_mouseEvent.KoefPixToMM = 1;
break;
}
case AscCommon.MobileTouchMode.Zoom:
{
this.delegate.HtmlPage.NoneRepaintPages = true;
this.ZoomDistance = this.getPointerDistance(e);
this.ZoomValue = this.delegate.GetZoom();
break;
}
case AscCommon.MobileTouchMode.Cursor:
{
this.Mode = AscCommon.MobileTouchMode.Scroll;
this.DownPoint = this.delegate.ConvertCoordsFromCursor(global_mouseEvent.X, global_mouseEvent.Y);
isCheckForm = true;
break;
}
case AscCommon.MobileTouchMode.TableMove:
{
this.delegate.Drawing_OnMouseDown(e.touches ? e.touches[0] : e);
break;
}
case AscCommon.MobileTouchMode.TableRuler:
{
this.delegate.HtmlPage.OnUpdateOverlay();
break;
}
}
if (AscCommon.AscBrowser.isAndroid && !AscCommon.AscBrowser.isSailfish)
isPreventDefault = false;
if (this.Api.isRestrictionForms() && isCheckForm && this.delegate.HtmlPage.m_oLogicDocument)
{
let isInForm = this.delegate.HtmlPage.m_oLogicDocument.IsInForm(this.DownPoint.X, this.DownPoint.Y, this.DownPoint.Page);
if (!isInForm)
isPreventDefault = true;
}
if (this.isViewMode(true) || isPreventDefault)
AscCommon.stopEvent(e);
return false;
};
CMobileTouchManager.prototype.onTouchMove = function(e)
{
this.checkPointerMultiTouchAdd(e);
if (this.delegate.IsReader())
return this.onTouchMove_renderer(e);
if (this.Mode != AscCommon.MobileTouchMode.FlowObj && this.Mode != AscCommon.MobileTouchMode.TableMove)
AscCommon.check_MouseMoveEvent(e.touches ? e.touches[0] : e);
if (!this.MoveAfterDown)
{
if (Math.abs(this.DownPointOriginal.X - global_mouseEvent.X) > this.MoveMinDist ||
Math.abs(this.DownPointOriginal.Y - global_mouseEvent.Y) > this.MoveMinDist)
{
this.MoveAfterDown = true;
}
}
switch (this.Mode)
{
case AscCommon.MobileTouchMode.Cursor:
{
this.MoveCursorToPoint(true);
break;
}
case AscCommon.MobileTouchMode.Scroll:
{
var _newTime = new Date().getTime();
if ((_newTime - this.TimeDown) > this.ReadingGlassTime && !this.MoveAfterDown)
{
this.Mode = AscCommon.MobileTouchMode.Cursor;
this.MoveCursorToPoint(false);
}
else
{
if (this.MoveAfterDown)
this.iScroll._move(e);
AscCommon.stopEvent(e);
}
break;
}
case AscCommon.MobileTouchMode.Zoom:
{
var isTouch2 = ((e.touches && 2 == e.touches.length) || (2 == this.getPointerCount()));
if (!isTouch2)
{
this.Mode = AscCommon.MobileTouchMode.None;
return;
}
var zoomCurrentDist = this.getPointerDistance(e);
if (zoomCurrentDist == 0)
zoomCurrentDist = 1;
var _zoomFix = this.ZoomValue / 100;
var _zoomCur = _zoomFix * (zoomCurrentDist / this.ZoomDistance);
_zoomCur = (_zoomCur * 100) >> 0;
if (_zoomCur < this.ZoomValueMin)
_zoomCur = this.ZoomValueMin;
else if (_zoomCur > this.ZoomValueMax)
_zoomCur = this.ZoomValueMax;
this.delegate.SetZoom(_zoomCur);
AscCommon.stopEvent(e);
break;
}
case AscCommon.MobileTouchMode.InlineObj:
{
break;
}
case AscCommon.MobileTouchMode.FlowObj:
{
this.delegate.Drawing_OnMouseMove(e.touches ? e.touches[0] : e);
AscCommon.stopEvent(e);
break;
}
case AscCommon.MobileTouchMode.Select:
{
// во время движения может смениться порядок ректов
global_mouseEvent.ClickCount = 1;
var pos = this.delegate.ConvertCoordsFromCursor(global_mouseEvent.X, global_mouseEvent.Y);
this.delegate.Logic_OnMouseMove(global_mouseEvent, pos.X, pos.Y, pos.Page);
AscCommon.stopEvent(e);
break;
}
case AscCommon.MobileTouchMode.TableMove:
{
this.delegate.Drawing_OnMouseMove(e.touches ? e.touches[0] : e);
AscCommon.stopEvent(e);
break;
}
case AscCommon.MobileTouchMode.TableRuler:
{
var DrawingDocument = this.delegate.DrawingDocument;
var pos = DrawingDocument.ConvertCoordsFromCursorPage(global_mouseEvent.X, global_mouseEvent.Y, DrawingDocument.TableOutlineDr.CurrentPageIndex);
if (true === this.delegate.HtmlPage.m_bIsRuler)
{
pos.X -= 5;
pos.Y -= 7;
}
var _Transform = null;
if (DrawingDocument.TableOutlineDr)
_Transform = DrawingDocument.TableOutlineDr.TableMatrix;
if (_Transform && !global_MatrixTransformer.IsIdentity(_Transform))
{
var _invert = _Transform.CreateDublicate();
_invert.Invert();
var __x = _invert.TransformPointX(pos.X, pos.Y);
var __y = _invert.TransformPointY(pos.X, pos.Y);
pos.X = __x;
pos.Y = __y;
}
if (this.TableCurrentMoveDir == 0)
{
this.TableCurrentMoveValue = pos.X;
if (null != this.TableCurrentMoveValueMin)
{
if (this.TableCurrentMoveValueMin > this.TableCurrentMoveValue)
this.TableCurrentMoveValue = this.TableCurrentMoveValueMin;
}
if (null != this.TableCurrentMoveValueMax)
{
if (this.TableCurrentMoveValueMax < this.TableCurrentMoveValue)
this.TableCurrentMoveValue = this.TableCurrentMoveValueMax;
}
}
else
{
this.TableCurrentMoveValue = pos.Y;
if (null != this.TableCurrentMoveValueMin)
{
if (this.TableCurrentMoveValueMin > this.TableCurrentMoveValue)
this.TableCurrentMoveValue = this.TableCurrentMoveValueMin;
}
if (null != this.TableCurrentMoveValueMax)
{
if (this.TableCurrentMoveValueMax < this.TableCurrentMoveValue)
this.TableCurrentMoveValue = this.TableCurrentMoveValueMax;
}
}
this.delegate.HtmlPage.OnUpdateOverlay();
AscCommon.stopEvent(e);
break;
}
default:
break;
}
};
CMobileTouchManager.prototype.onTouchEnd = function(e)
{
this.IsTouching = false;
if (this.delegate.IsReader())
{
this.checkPointerMultiTouchRemove(e);
AscCommon.g_inputContext.preventVirtualKeyboard(e);
return this.onTouchEnd_renderer(e);
}
var _e = e.changedTouches ? e.changedTouches[0] : e;
if (this.Mode != AscCommon.MobileTouchMode.FlowObj && this.Mode != AscCommon.MobileTouchMode.TableMove)
{
AscCommon.check_MouseUpEvent(_e);
}
var isCheckContextMenuMode = true;
var isCheckContextMenuSelect = false;
var isCheckContextMenuCursor = (this.Mode == AscCommon.MobileTouchMode.Cursor);
var isCheckContextMenuTableRuler = false;
var isPreventDefault = false;
switch (this.Mode)
{
case AscCommon.MobileTouchMode.None:
case AscCommon.MobileTouchMode.Scroll:
case AscCommon.MobileTouchMode.InlineObj:
case AscCommon.MobileTouchMode.FlowObj:
case AscCommon.MobileTouchMode.Zoom:
case AscCommon.MobileTouchMode.TableMove:
{
isPreventDefault = true;
break;
}
default:
{
break;
}
}
switch (this.Mode)
{
case AscCommon.MobileTouchMode.Cursor:
{
// ничего не делаем. курсор уже установлен
this.Mode = AscCommon.MobileTouchMode.None;
break;
}
case AscCommon.MobileTouchMode.Scroll:
{
if (!this.MoveAfterDown)
{
if (!this.checkDesktopModeContextMenuEnd())
{
global_mouseEvent.Button = 0;
this.delegate.Drawing_OnMouseDown(_e);
this.delegate.Drawing_OnMouseUp(_e);
this.Api.sendEvent("asc_onTapEvent", e);
}
var typeMenu = this.delegate.GetContextMenuType();
if (typeMenu == AscCommon.MobileTouchContextMenuType.Target ||
typeMenu == AscCommon.MobileTouchContextMenuType.Select)
isPreventDefault = false;
}
else
{
// нужно запускать анимацию скролла, если она есть
// TODO:
isCheckContextMenuMode = false;
this.iScroll._end(e);
}
this.Mode = AscCommon.MobileTouchMode.None;
break;
}
case AscCommon.MobileTouchMode.Zoom:
{
// здесь нужно запускать отрисовку, если есть анимация зума
this.delegate.HtmlPage.NoneRepaintPages = false;
this.delegate.HtmlPage.m_bIsFullRepaint = true;
if (!this.Api.isPdfEditor())
this.delegate.HtmlPage.OnScroll();
else
this.Api.getDocumentRenderer().scheduleRepaint();
this.Mode = AscCommon.MobileTouchMode.None;
isCheckContextMenuMode = false;
break;
}
case AscCommon.MobileTouchMode.InlineObj:
{
// TODO:
break;
}
case AscCommon.MobileTouchMode.FlowObj:
{
// TODO:
this.delegate.Drawing_OnMouseUp(e.changedTouches ? e.changedTouches[0] : e);
this.Mode = AscCommon.MobileTouchMode.None;
break;
}
case AscCommon.MobileTouchMode.Select:
{
// ничего не нужно делать
this.DragSelect = 0;
this.Mode = AscCommon.MobileTouchMode.None;
var pos = this.delegate.ConvertCoordsFromCursor(global_mouseEvent.X, global_mouseEvent.Y);
this.delegate.Logic_OnMouseUp(global_mouseEvent, pos.X, pos.Y, pos.Page);
AscCommon.stopEvent(e);
isCheckContextMenuSelect = true;
break;
}
case AscCommon.MobileTouchMode.TableMove:
{
this.delegate.Drawing_OnMouseUp(e.changedTouches ? e.changedTouches[0] : e);
this.Mode = AscCommon.MobileTouchMode.None;
break;
}
case AscCommon.MobileTouchMode.TableRuler:
{
isCheckContextMenuTableRuler = true;
var HtmlPage = this.delegate.HtmlPage;
var DrawingDocument = this.delegate.DrawingDocument;
HtmlPage.StartUpdateOverlay();
this.Mode = AscCommon.MobileTouchMode.None;
var pos = DrawingDocument.ConvertCoordsFromCursorPage(global_mouseEvent.X, global_mouseEvent.Y, DrawingDocument.TableOutlineDr.CurrentPageIndex);
if (true === HtmlPage.m_bIsRuler)
{
pos.X -= 5;
pos.Y -= 7;
}
var _Transform = null;
if (DrawingDocument.TableOutlineDr)
_Transform = DrawingDocument.TableOutlineDr.TableMatrix;
if (_Transform && !global_MatrixTransformer.IsIdentity(_Transform))
{
var _invert = _Transform.CreateDublicate();
_invert.Invert();
var __x = _invert.TransformPointX(pos.X, pos.Y);
var __y = _invert.TransformPointY(pos.X, pos.Y);
pos.X = __x;
pos.Y = __y;
}
if (this.TableCurrentMoveDir == 0)
{
this.TableCurrentMoveValue = pos.X;
if (null != this.TableCurrentMoveValueMin)
{
if (this.TableCurrentMoveValueMin > this.TableCurrentMoveValue)
this.TableCurrentMoveValue = this.TableCurrentMoveValueMin;
}
if (null != this.TableCurrentMoveValueMax)
{
if (this.TableCurrentMoveValueMax < this.TableCurrentMoveValue)
this.TableCurrentMoveValue = this.TableCurrentMoveValueMax;
}
var _markup = HtmlPage.m_oHorRuler.m_oTableMarkup;
_markup.Cols[this.TableCurrentMovePos] += (this.TableCurrentMoveValue - this.TableCurrentMoveValueOld);
_markup.Cols[this.TableCurrentMovePos] = Math.max(_markup.Cols[this.TableCurrentMovePos], 1);
if ( false === HtmlPage.m_oLogicDocument.Document_Is_SelectionLocked(AscCommon.changestype_Table_Properties) )
{
HtmlPage.m_oLogicDocument.StartAction(AscDFH.historydescription_Document_SetTableMarkup_Hor);
_markup.Table.Update_TableMarkupFromRuler(_markup, true, this.TableCurrentMovePos + 1);
HtmlPage.m_oLogicDocument.UpdateInterface();
HtmlPage.m_oLogicDocument.FinalizeAction();
}
}
else
{
this.TableCurrentMoveValue = pos.Y;
if (null != this.TableCurrentMoveValueMin)
{
if (this.TableCurrentMoveValueMin > this.TableCurrentMoveValue)
this.TableCurrentMoveValue = this.TableCurrentMoveValueMin;
}
if (null != this.TableCurrentMoveValueMax)
{
if (this.TableCurrentMoveValueMax < this.TableCurrentMoveValue)
this.TableCurrentMoveValue = this.TableCurrentMoveValueMax;
}
var _markup = HtmlPage.m_oHorRuler.m_oTableMarkup;
_markup.Rows[this.TableCurrentMovePos].H += (this.TableCurrentMoveValue - this.TableCurrentMoveValueOld);
if ( false === this.delegate.HtmlPage.m_oLogicDocument.Document_Is_SelectionLocked(AscCommon.changestype_Table_Properties) )
{
HtmlPage.m_oLogicDocument.StartAction(AscDFH.historydescription_Document_SetTableMarkup_Hor);
_markup.Table.Update_TableMarkupFromRuler(_markup, false, this.TableCurrentMovePos + 1);
HtmlPage.m_oLogicDocument.UpdateInterface();
HtmlPage.m_oLogicDocument.FinalizeAction();
}
}
HtmlPage.OnUpdateOverlay();
HtmlPage.EndUpdateOverlay();
break;
}
default:
break;
}
this.checkPointerMultiTouchRemove(e);
if (this.isViewMode() || isPreventDefault && !this.Api.getHandlerOnClick())
{
AscCommon.stopEvent(e);
AscCommon.g_inputContext.preventVirtualKeyboard(e);
}
if (true !== this.iScroll.isAnimating)
this.CheckContextMenuTouchEnd(isCheckContextMenuMode, isCheckContextMenuSelect, isCheckContextMenuCursor, isCheckContextMenuTableRuler);
if (AscCommon.g_inputContext.isHardCheckKeyboard)
isPreventDefault ? AscCommon.g_inputContext.preventVirtualKeyboard_Hard() : AscCommon.g_inputContext.enableVirtualKeyboard_Hard();
if (!isPreventDefault && this.Api.isMobileVersion && !this.Api.isUseOldMobileVersion())
this.showKeyboard();
return false;
};
CMobileTouchManager.prototype.mainOnTouchStart = function(e)
{
if (AscCommon.g_inputContext && AscCommon.g_inputContext.externalChangeFocus())
return;
this.removeHandlersOnClick();
if (!this.Api.asc_IsFocus() && !this.Api.isMobileVersion)
this.Api.asc_enableKeyEvents(true);
var oWordControl = this.Api.WordControl;
oWordControl.IsUpdateOverlayOnlyEndReturn = true;
oWordControl.StartUpdateOverlay();
var ret = this.onTouchStart(e);
oWordControl.IsUpdateOverlayOnlyEndReturn = false;
oWordControl.EndUpdateOverlay();
return ret;
};
CMobileTouchManager.prototype.mainOnTouchMove = function(e)
{
var oWordControl = this.Api.WordControl;
oWordControl.IsUpdateOverlayOnlyEndReturn = true;
oWordControl.StartUpdateOverlay();
var ret = this.onTouchMove(e);
oWordControl.IsUpdateOverlayOnlyEndReturn = false;
oWordControl.EndUpdateOverlay();
return ret;
};
CMobileTouchManager.prototype.mainOnTouchEnd = function(e)
{
var oWordControl = this.Api.WordControl;
oWordControl.IsUpdateOverlayOnlyEndReturn = true;
oWordControl.StartUpdateOverlay();
var ret = this.onTouchEnd(e);
if (this.isGlassDrawed)
oWordControl.OnUpdateOverlay();
oWordControl.IsUpdateOverlayOnlyEndReturn = false;
oWordControl.EndUpdateOverlay();
this.checkDesktopModeContextMenuEnd(e);
return ret;
};
/*************************************** READER ******************************************/
/**
* @extends {AscCommon.CMobileDelegateSimple}
*/
function CMobileDelegateEditorReader(_manager)
{
AscCommon.CMobileDelegateSimple.call(this, _manager);
this.HtmlPage = this.Api.WordControl;
}
CMobileDelegateEditorReader.prototype = Object.create(AscCommon.CMobileDelegateSimple.prototype);
CMobileDelegateEditorReader.prototype.constructor = CMobileDelegateEditorReader;
CMobileDelegateEditorReader.prototype.GetZoom = function()
{
return this.HtmlPage.m_nZoomValue;
};
CMobileDelegateEditorReader.prototype.SetZoom = function(_value)
{
this.HtmlPage.m_oApi.zoom(_value);
};
CMobileDelegateEditorReader.prototype.GetScrollerParent = function()
{
return this.HtmlPage.m_oMainView.HtmlElement;
};
/**
* @extends {AscCommon.CMobileTouchManagerBase}
*/
function CReaderTouchManager(_config)
{
AscCommon.CMobileTouchManagerBase.call(this, _config || {});
this.SelectEnabled = false;
this.TableTrackEnabled = false;
this.bIsLock = false;
this.bIsMoveAfterDown = false;
}
CReaderTouchManager.prototype = Object.create(AscCommon.CMobileTouchManagerBase.prototype);
CReaderTouchManager.prototype.constructor = CReaderTouchManager;
CReaderTouchManager.prototype.Init = function(_api)
{
this.Api = _api;
this.iScrollElement = "reader_id";
// создаем делегата. инициализация его - ПОСЛЕ создания iScroll
this.delegate = new CMobileDelegateEditorReader(this);
this.iScroll = new window.IScrollMobile(this.delegate.GetScrollerParent(), {
scrollbars: true,
mouseWheel: !this.isDesktopMode,
interactiveScrollbars: true,
shrinkScrollbars: 'scale',
fadeScrollbars: true,
scrollX : true,
scroller_id : this.iScrollElement,
bounce : true
});
// создаем делегата. инициализация его - ПОСЛЕ создания iScroll
this.delegate.Init(this);
this.ClearContextMenu();
};
CReaderTouchManager.prototype.onTouchStart = function(e)
{
this.iScroll._start(e);
this.bIsLock = true;
this.bIsMoveAfterDown = false;
};
CReaderTouchManager.prototype.onTouchMove = function(e)
{
if (!this.bIsLock)
return;
this.iScroll._move(e);
this.bIsMoveAfterDown = true;
};
CReaderTouchManager.prototype.onTouchEnd = function(e)
{
this.iScroll._end(e);
this.bIsLock = false;
if (this.bIsMoveAfterDown === false)
{
this.Api.sendEvent("asc_onTapEvent", e);
}
};
CReaderTouchManager.prototype.Resize = function()
{
var HtmlPage = this.delegate.HtmlPage;
HtmlPage.ReaderModeDivWrapper.style.width = HtmlPage.m_oMainView.HtmlElement.style.width;
HtmlPage.ReaderModeDivWrapper.style.height = HtmlPage.m_oMainView.HtmlElement.style.height;
if (this.iScroll != null)
this.iScroll.refresh();
};
CReaderTouchManager.prototype.ChangeFontSize = function()
{
if (this.iScroll != null)
this.iScroll.refresh();
};
CReaderTouchManager.prototype.Destroy = function()
{
if (this.iScroll != null)
this.iScroll.destroy();
};
//--------------------------------------------------------export----------------------------------------------------
window['AscCommon'] = window['AscCommon'] || {};
window['AscCommon'].CMobileTouchManager = CMobileTouchManager;
window['AscCommon'].CReaderTouchManager = CReaderTouchManager;
})(window);