Files
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

5215 lines
186 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* (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) {
let oThis;
const thumbnailsPositionMap = AscCommon.thumbnailsPositionMap;
const g_anchor_left = AscCommon.g_anchor_left;
const g_anchor_top = AscCommon.g_anchor_top;
const g_anchor_right = AscCommon.g_anchor_right;
const g_anchor_bottom = AscCommon.g_anchor_bottom;
const CreateControlContainer = AscCommon.CreateControlContainer;
const CreateControl = AscCommon.CreateControl;
const global_keyboardEvent = AscCommon.global_keyboardEvent;
const global_mouseEvent = AscCommon.global_mouseEvent;
const g_dKoef_pix_to_mm = AscCommon.g_dKoef_pix_to_mm;
const g_dKoef_mm_to_pix = AscCommon.g_dKoef_mm_to_pix;
const HIDDEN_PANE_HEIGHT = 1;
// Animation pane
const HEADER_HEIGHT = 40 * g_dKoef_pix_to_mm;
const TIMELINE_HEIGHT = 40 * g_dKoef_pix_to_mm;
const TIMELINE_LIST_RIGHT_MARGIN = 23 * g_dKoef_pix_to_mm;
const TIMELINE_HEADER_RIGHT_MARGIN = 18 * g_dKoef_pix_to_mm;
const MEDIA_CONTROL_HEIGHT = 40;
const MIN_MEDIA_CONTROL_WIDTH = 320;
const MIN_MEDIA_CONTROL_CONTROL_INSET = 20;
const MEDIA_CONTROL_TOP_MARGIN = 10;
function Splitter(position, minPosition, maxPosition) {
this.position = position;
this.minPosition = minPosition;
this.maxPosition = maxPosition;
this.savedPosition = position;
this.initialPosition = position;
}
Splitter.prototype.setPosition = function (position, considerLimits, preserveSavedPosition) {
const newPosition = considerLimits
? Math.min(Math.max(position, this.minPosition), this.maxPosition)
: position;
this.position = newPosition;
if (!preserveSavedPosition)
this.savedPosition = newPosition;
};
Splitter.prototype.setLimits = function (minPosition, maxPosition) {
this.minPosition = minPosition;
this.maxPosition = maxPosition;
};
function CEditorPage(api) {
this.Name = "";
this.IsSupportNotes = true;
this.IsSupportAnimPane = true;
this.EditorType = "presentations";
this.X = 0;
this.Y = 0;
this.Width = 10;
this.Height = 10;
// body
this.m_oBody = null;
// thumbnails
this.m_oThumbnailsContainer = null;
this.m_oThumbnailsBack = null;
this.m_oThumbnailsSplit = null;
this.m_oThumbnails = null;
this.m_oThumbnails_scroll = null;
// notes
this.m_oNotesContainer = null;
this.m_oNotes = null;
this.m_oNotes_scroll = null;
this.m_oNotesOverlay = null;
this.m_oNotesApi = null;
// main
this.m_oMainParent = null;
this.m_oMainContent = null;
// right panel (vertical scroll & buttons (page & rulersEnabled))
this.m_oPanelRight = null;
this.m_oPanelRight_buttonRulers = null;
this.m_oPanelRight_vertScroll = null;
this.m_oPanelRight_buttonPrevPage = null;
this.m_oPanelRight_buttonNextPage = null;
// vertical ruler (left panel)
this.m_oLeftRuler = null;
this.m_oLeftRuler_buttonsTabs = null;
this.m_oLeftRuler_vertRuler = null;
// horizontal ruler (top panel)
this.m_oTopRuler = null;
this.m_oTopRuler_horRuler = null;
this.ScrollWidthPx = 14;
this.ScrollWidthMm = 14 * g_dKoef_pix_to_mm;
// main view
this.m_oMainView = null;
this.m_oEditor = null;
this.m_oOverlay = null;
this.m_oOverlayApi = new AscCommon.COverlay();
this.m_oOverlayApi.m_bIsAlwaysUpdateOverlay = true;
// reporter mode
this.m_oDemonstrationDivParent = null;
this.m_oDemonstrationDivId = null;
// scrolls api
this.m_oScrollHor_ = null;
this.m_oScrollVer_ = null;
this.m_oScrollThumb_ = null;
this.m_oScrollNotes_ = null;
this.m_oScrollAnim_ = null;
this.m_nVerticalSlideChangeOnScrollInterval = 300; // как часто можно менять слайды при вертикальном скролле
this.m_nVerticalSlideChangeOnScrollLast = -1;
this.m_nVerticalSlideChangeOnScrollEnabled = false;
this.m_oScrollHorApi = null;
this.m_oScrollVerApi = null;
this.m_oScrollThumbApi = null;
this.m_oScrollNotesApi = null;
this.StartVerticalScroll = false;
this.VerticalScrollOnMouseUp = { SlideNum: 0, ScrollY: 0, ScrollY_max: 0 };
// properties
this.m_bDocumentPlaceChangedEnabled = false;
this.m_nZoomValue = 100;
this.zoom_values = [50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 320, 340, 360, 380, 400, 425, 450, 475, 500];
this.m_nZoomType = 2; // 0 - custom, 1 - fitToWodth, 2 - fitToPage
this.m_oBoundsController = new AscFormat.CBoundsController();
this.m_nTabsType = tab_Left;
// position
this.m_dScrollY = 0;
this.m_dScrollX = 0;
this.m_dScrollY_max = 1;
this.m_dScrollX_max = 1;
this.m_dScrollX_Central = 0;
this.m_dScrollY_Central = 0;
this.m_bIsRePaintOnScroll = true;
this.m_dDocumentWidth = 0;
this.m_dDocumentHeight = 0;
this.m_dDocumentPageWidth = 0;
this.m_dDocumentPageHeight = 0;
this.m_bIsHorScrollVisible = false;
this.m_bIsScroll = false;
// rulers
this.m_bIsRuler = false;
this.m_oHorRuler = new CHorRuler();
this.m_oHorRuler.IsCanMoveMargins = false;
this.m_oHorRuler.IsCanMoveAnyMarkers = false;
this.m_oHorRuler.IsDrawAnyMarkers = false;
this.m_oVerRuler = new CVerRuler();
this.m_oVerRuler.IsCanMoveMargins = false;
this.m_oHorRuler.m_oWordControl = this;
this.m_oVerRuler.m_oWordControl = this;
this.m_bIsUpdateHorRuler = false;
this.m_bIsUpdateVerRuler = false;
this.IsEnabledRulerMarkers = false;
// drawing document
this.m_oDrawingDocument = new AscCommon.CDrawingDocument();
this.m_oLogicDocument = null;
// interface (master & layout)
this.m_oLayoutDrawer = new CLayoutThumbnailDrawer();
this.m_oLayoutDrawer.DrawingDocument = this.m_oDrawingDocument;
this.m_oMasterDrawer = new CMasterThumbnailDrawer();
this.m_oMasterDrawer.DrawingDocument = this.m_oDrawingDocument;
this.AllLayouts = [];
this.LastMaster = null;
this.m_oDrawingDocument.m_oWordControl = this;
this.m_oDrawingDocument.TransitionSlide.HtmlPage = this;
this.m_oDrawingDocument.m_oLogicDocument = this.m_oLogicDocument;
// flags
this.m_bIsUpdateTargetNoAttack = false;
this.arrayEventHandlers = [];
this.m_oTimerScrollSelect = -1;
this.IsFocus = true;
this.m_bIsMouseLock = false;
this.bIsUseKeyPress = true;
this.bIsEventPaste = false;
this.ZoomFreePageNum = -1;
this.MainScrollsEnabledFlag = 0;
this.m_bIsIE = AscCommon.AscBrowser.isIE;
// thumbnails
this.Thumbnails = new CThumbnailsManager(this);
// сплиттеры (для табнейлов и для заметок)
this.splitters;
this.SplitterDiv = null;
this.SplitterType = 0;
this.IsUseNullThumbnailsSplitter = false;
// axis Y
this.SlideScrollMIN = 0;
this.SlideScrollMAX = 0;
// поддерживает ли браузер нецелые пикселы
this.bIsDoublePx = AscCommon.isSupportDoublePx();
this.m_nCurrentTimeClearCache = 0;
this.IsGoToPageMAXPosition = false;
this.retinaScaling = AscCommon.AscBrowser.retinaPixelRatio;
// demonstrationMode
this.DemonstrationManager = new CDemonstrationManager(this);
// overlay flags
this.IsUpdateOverlayOnlyEnd = false;
this.IsUpdateOverlayOnEndCheck = false;
// reporter
this.reporterTimer = -1;
this.reporterTimerAdd = 0;
this.reporterTimerLastStart = -1;
this.reporterPointer = false;
this.reporterTooltip = null;
this.reporterTooltipTimeout = null;
// mobile
this.MobileTouchManager = null;
this.MobileTouchManagerThumbnails = null;
// draw
this.SlideDrawer = new CSlideDrawer();
this.SlideBoundsOnCalculateSize = new AscFormat.CBoundsController();
this.DrawingFreeze = false;
this.NoneRepaintPages = false;
this.paintMessageLoop = new AscCommon.PaintMessageLoop(40, api);
this.MouseHandObject = null;
this.m_oApi = api;
oThis = this;
}
CEditorPage.prototype.Init = function () {
if (this.m_oApi.isReporterMode) {
const element = document.getElementById(this.Name);
if (element) element.style.overflow = "hidden";
}
const thumbnailsSplitter = new Splitter(67.5, 20, 80);
const notesSplitter = this.m_oApi.isReporterMode
? new Splitter(Math.min(Math.max(window.innerHeight * 0.5 * AscCommon.g_dKoef_pix_to_mm, 10), 200), 10, 200)
: new Splitter(this.IsNotesSupported() && !this.m_oApi.isEmbedVersion ? 10 : 0, 10, 100);
const animPaneSplitter = new Splitter(0, 40, 100 - HIDDEN_PANE_HEIGHT);
this.splitters = [thumbnailsSplitter, notesSplitter, animPaneSplitter];
this.m_oBody = CreateControlContainer(this.Name);
this.m_oBody.HtmlElement.style.touchAction = "none";
this.initThumbnails();
this.recalculateThumbnailsBounds();
this.initMainContent();
this.recalculateMainContentBounds();
// Bottom panels (Notes and Animation Pane)
this.m_oBottomPanesContainer = CreateControlContainer("id_bottom_pannels_container");
this.m_oBottomPanesContainer.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, -1, this.splitters[1].position);
this.m_oBottomPanesContainer.Anchor = (g_anchor_left | g_anchor_right | g_anchor_bottom);
this.m_oMainParent.AddControl(this.m_oBottomPanesContainer);
this.initNotes();
this.initAnimationPane();
if (this.m_oApi.isReporterMode) {
var _documentParent = document.createElement("div");
_documentParent.setAttribute("id", "id_reporter_dem_parent");
_documentParent.setAttribute("class", "block_elem");
_documentParent.style.overflow = "hidden";
_documentParent.style.zIndex = 11;
_documentParent.style.backgroundColor = GlobalSkin.BackgroundColor;
this.m_oMainView.HtmlElement.appendChild(_documentParent);
this.m_oDemonstrationDivParent = CreateControlContainer("id_reporter_dem_parent");
this.m_oDemonstrationDivParent.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, -1, -1);
this.m_oDemonstrationDivParent.Anchor = (g_anchor_left | g_anchor_right | g_anchor_top | g_anchor_bottom);
this.m_oMainView.AddControl(this.m_oDemonstrationDivParent);
var _documentDem = document.createElement("div");
_documentDem.setAttribute("id", "id_reporter_dem");
_documentDem.setAttribute("class", "block_elem");
_documentDem.style.overflow = "hidden";
_documentDem.style.backgroundColor = GlobalSkin.BackgroundColorThumbnails;
_documentParent.appendChild(_documentDem);
this.m_oDemonstrationDivId = CreateControlContainer("id_reporter_dem");
this.m_oDemonstrationDivId.Bounds.SetParams(0, 0, 1000, 8, false, false, false, true, -1, -1);
this.m_oDemonstrationDivId.Anchor = (g_anchor_left | g_anchor_right | g_anchor_top | g_anchor_bottom);
this.m_oDemonstrationDivParent.AddControl(this.m_oDemonstrationDivId);
this.m_oDemonstrationDivId.HtmlElement.style.cursor = "default";
// bottons
var demBottonsDiv = document.createElement("div");
demBottonsDiv.setAttribute("id", "id_reporter_dem_controller");
demBottonsDiv.setAttribute("class", "block_elem");
demBottonsDiv.style.overflow = "hidden";
demBottonsDiv.style.backgroundColor = GlobalSkin.BackgroundColorThumbnails;
demBottonsDiv.style.cursor = "default";
_documentParent.appendChild(demBottonsDiv);
demBottonsDiv.onmousedown = function (e) { AscCommon.stopEvent(e); };
var _ctrl = CreateControlContainer("id_reporter_dem_controller");
_ctrl.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, -1, 8);
_ctrl.Anchor = (g_anchor_left | g_anchor_right | g_anchor_bottom);
this.m_oDemonstrationDivParent.AddControl(_ctrl);
var _images_url = "../../../../sdkjs/common/Images/reporter/";
var _head = document.getElementsByTagName('head')[0];
var styleContent = ".block_elem_no_select { -khtml-user-select: none; user-select: none; -moz-user-select: none; -webkit-user-select: none; }";
styleContent += ".back_image_buttons { position:absolute; left: 0px; top: 0px; background-image: url('" + _images_url + "buttons.png') }";
styleContent += "@media (-webkit-min-device-pixel-ratio: 1.25) and (-webkit-max-device-pixel-ratio: 1.4),\
(min-resolution: 1.25dppx) and (max-resolution: 1.4dppx), \
(min-resolution: 120dpi) and (max-resolution: 143dpi) {\n\
.back_image_buttons { position:absolute; left: 0px; top: 0px; background-image: url('" + _images_url + "buttons@1.25x.png');background-size: 40px 200px; }\
}";
styleContent += "@media all and (-webkit-min-device-pixel-ratio : 1.5),all and (-o-min-device-pixel-ratio: 3/2),all and (min--moz-device-pixel-ratio: 1.5),all and (min-device-pixel-ratio: 1.5) {\n\
.back_image_buttons { position:absolute; left: 0px; top: 0px; background-image: url('" + _images_url + "buttons@1.5x.png');background-size: 40px 200px; }\
}";
styleContent += "@media (-webkit-min-device-pixel-ratio: 1.75) and (-webkit-max-device-pixel-ratio: 1.9),\
(min-resolution: 1.75dppx) and (max-resolution: 1.9dppx),\
(min-resolution: 168dpi) and (max-resolution: 191dpi) {\n\
.back_image_buttons { position:absolute; left: 0px; top: 0px; background-image: url('" + _images_url + "buttons@1.75x.png');background-size: 40px 200px; }\
}";
styleContent += "@media all and (-webkit-min-device-pixel-ratio : 2),all and (-o-min-device-pixel-ratio: 2),all and (min--moz-device-pixel-ratio: 2),all and (min-device-pixel-ratio: 2) {\n\
.back_image_buttons { position:absolute; left: 0px; top: 0px; background-image: url('" + _images_url + "buttons@2x.png');background-size: 40px 200px; }\
}";
styleContent += ".menu-item-icon { position: relative;display:inline-block;float:left;width:20px;height:20px;margin:-2px 4px 0 -16px; }";
styleContent += ".dem_menu {list-style: none;display: none; position: fixed; right: auto; min-height: fit-content; height: auto; min-width: 120px; padding: 5px 0; border-radius: 4px; background-color: " + GlobalSkin.DemBackgroundColor + "; border: 1px solid " + GlobalSkin.DemSplitterColor + ";}";
styleContent += "#dem_id_draw_menu li>a{color:" + GlobalSkin.DemButtonTextColor + "; white-space: nowrap; font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;;display:block; padding:5px 20px;line-height:16px;cursor:pointer;font-size:11px;text-align:left;}";
styleContent += "#dem_id_draw_menu li>a:hover{background-color:" + GlobalSkin.DemButtonBackgroundColorHover + ";}";
styleContent += "#dem_id_draw_menu li>a[data-checked=\"true\"]{color:" + GlobalSkin.DemButtonTextColorActive + ";background-color:" + GlobalSkin.DemButtonBackgroundColorActive + ";}";
styleContent += "#dem_id_draw_menu >li.submenu>a:after{display:block;content:\" \";float:right;width:0;height:0;border-color:#fff0;border-style:solid;border-width:3px 0 3px 3px;border-left-color:" + GlobalSkin.DemButtonTextColor + ";margin-top:5px;margin-right:-7px;margin-left:0}";
styleContent += ".menu-color-cell { display: inline-block; cursor: pointer; border: 1px solid transparent; }";
styleContent += ".menu-color-cell span { display: block; width:14px; height:14px; border:1px solid rgb(0 0 0 / .2); pointer-events: none; }";
styleContent += ".menu-color-cell em { display: block; border: none; pointer-events: none; }";
styleContent += ".menu-color-cell[data-current] { border-color:" + GlobalSkin.DemSplitterColor + ";}";
styleContent += ".dem_draw_menu_divider { margin: 4px 0; height: 1px; background-color:" + GlobalSkin.DemSplitterColor + ";}";
styleContent += this.getStylesReporter();
var style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = styleContent;
_head.appendChild(style);
this.reporterTranslates = [
"Reset",
"Slide {0} of {1}",
"End slideshow",
"The end of slide preview. Click to exit.",
"Pen",
"Highlighter",
"Ink color",
"Eraser",
"Erase screen",
"Start presentation",
"Pause presentation",
"Previous slide",
"Next slide",
"Laser pointer",
"Draw"
];
var _translates = this.m_oApi.reporterTranslates;
if (_translates) {
this.reporterTranslates[0] = _translates[0];
this.reporterTranslates[1] = _translates[1];
this.reporterTranslates[2] = _translates[2];
this.reporterTranslates[3] = _translates[3];
this.reporterTranslates[4] = _translates[4];
this.reporterTranslates[5] = _translates[5];
this.reporterTranslates[6] = _translates[6];
this.reporterTranslates[7] = _translates[7];
this.reporterTranslates[8] = _translates[8];
this.reporterTranslates[9] = _translates[9]; // Play
this.reporterTranslates[10] = _translates[10]; // Pause
this.reporterTranslates[11] = _translates[11] // Previous slide
this.reporterTranslates[12] = _translates[12] // Next slide
this.reporterTranslates[13] = _translates[13] // Pointer
this.reporterTranslates[14] = _translates[14] // Draw
if (_translates[3])
this.m_oApi.DemonstrationEndShowMessage(_translates[3]);
}
var _buttonsContent = "";
_buttonsContent += "<label class=\"block_elem_no_select dem-text-color\" id=\"dem_id_time\" style=\"text-shadow: none;white-space: nowrap;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 11px; position:absolute; left:10px; bottom: 7px;\">00:00:00</label>";
_buttonsContent += "<button class=\"btn-text-default-img\" id=\"dem_id_play\" data-play-tooltip=\"" + this.reporterTranslates[9] + "\" data-pause-tooltip=\"" + this.reporterTranslates[10] + "\" style=\"left: 60px; bottom: 3px; width: 20px; height: 20px;\"><span class=\"btn-play back_image_buttons\" id=\"dem_id_play_span\" style=\"width:100%;height:100%;\"></span></button>";
_buttonsContent += ("<button class=\"btn-text-default\" id=\"dem_id_reset\" style=\"left: 85px; bottom: 2px; \">" + this.reporterTranslates[0] + "</button>");
_buttonsContent += ("<button class=\"btn-text-default\" id=\"dem_id_end\" style=\"right: 10px; bottom: 2px; \">" + this.reporterTranslates[2] + "</button>");
_buttonsContent += "<button class=\"btn-text-default-img\" id=\"dem_id_prev\" data-tooltip=\"" + this.reporterTranslates[11] + "\" style=\"left: 150px; bottom: 3px; width: 20px; height: 20px;\"><span class=\"btn-prev back_image_buttons\" style=\"width:100%;height:100%;\"></span></button>";
_buttonsContent += "<button class=\"btn-text-default-img\" id=\"dem_id_next\" data-tooltip=\"" + this.reporterTranslates[12] + "\" style=\"left: 170px; bottom: 3px; width: 20px; height: 20px;\"><span class=\"btn-next back_image_buttons\" style=\"width:100%;height:100%;\"></span></button>";
_buttonsContent += "<div class=\"separator block_elem_no_select\" id=\"dem_id_sep\" style=\"left: 185px; bottom: 3px;\"></div>";
_buttonsContent += "<label class=\"block_elem_no_select dem-text-color\" id=\"dem_id_slides\" style=\"text-shadow: none;white-space: nowrap;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 11px; position:absolute; left:207px; bottom: 7px;\"></label>";
_buttonsContent += "<div class=\"separator block_elem_no_select\" id=\"dem_id_sep2\" style=\"left: 350px; bottom: 3px;\"></div>";
_buttonsContent += "<button class=\"btn-text-default-img\" id=\"dem_id_pointer\" data-tooltip=\"" + this.reporterTranslates[13] + "\" style=\"left: 365px; bottom: 3px; width: 20px; height: 20px;\"><span id=\"dem_id_pointer_span\" class=\"btn-pointer back_image_buttons\" style=\"width:100%;height:100%;\"></span></button>";
_buttonsContent += "<button class=\"btn-text-default-img\" id=\"dem_id_draw_menu_trigger\" data-tooltip=\"" + this.reporterTranslates[14] + "\" style=\"left: 385px; bottom: 3px; width: 20px; height: 20px;\"><span id=\"dem_id_draw_menu_trigger_span\" class=\"btn-pen back_image_buttons\" style=\"width:100%;height:100%;\"></span></button>";
let colorList = "";
const drawColors = ["FFFFFF", "000000", "E81416", "FFA500", "FAEB36", "79C314", "487DE7", "4B369D", "70369D"];
for (let i = 0; i < drawColors.length; i++) {
colorList += "<li class=\"menu-color-cell\" data-value=\"" + drawColors[i] + "\"><em><span style=\"background-color: #" + drawColors[i] + "\"></span></em></li>";
}
_buttonsContent += [
"<ul id=\"dem_id_draw_menu\" class=\"dem_menu\">",
"<li><a data-ratio data-tool=\"pen\"><span class=\"menu-item-icon btn-pen back_image_buttons\"></span>" + this.reporterTranslates[4] + "</a></li>",
"<li><a data-ratio data-tool=\"highlighter\"><span class=\"menu-item-icon btn-highlighter back_image_buttons\"></span>" + this.reporterTranslates[5] + "</a></li>",
"<li class=\"dem_draw_menu_divider\"></li>",
"<li id=\"dem_id_draw_color_menu_trigger\" class=\"submenu\"><a style=\"padding-left:28px;\">" + this.reporterTranslates[6] + "</a>",
"<ul id=\"dem_id_draw_color_menu\" class=\"dem_menu\" style=\"width: 162px;\">",
colorList,
"</ul>",
"</li>",
"<li class=\"dem_draw_menu_divider\"></li>",
"<li><a data-ratio data-tool=\"eraser\"><span class=\"menu-item-icon btn-eraser back_image_buttons\"></span>" + this.reporterTranslates[7] + "</a></li>",
"<li><a data-tool=\"erase-all\"><span class=\"menu-item-icon btn-erase-all back_image_buttons\"></span>" + this.reporterTranslates[8] + "</a></li>",
"</ul>"
].join("");
demBottonsDiv.innerHTML = _buttonsContent;
// events
this.m_oApi.asc_registerCallback("asc_onDemonstrationSlideChanged", function (slideNum) {
var _elem = document.getElementById("dem_id_slides");
if (!_elem)
return;
var _count = window.editor.getCountPages();
var _first_slide_number = window.editor.WordControl.m_oLogicDocument.getFirstSlideNumber();
var _current = slideNum + _first_slide_number;
if (_current > _count)
_current = _count;
var _text = "Slide {0} of {1}";
if (window.editor.WordControl.reporterTranslates)
_text = window.editor.WordControl.reporterTranslates[1];
_text = _text.replace("{0}", _current);
var _count_string;
if (_first_slide_number === 1) {
_count_string = "" + _count;
}
else {
_count_string = _first_slide_number + ' .. ' + (_count + _first_slide_number - 1)
}
_text = _text.replace("{1}", _count_string);
_elem.innerHTML = _text;
//window.editor.WordControl.Thumbnails.SelectPage(_current - 1);
window.editor.WordControl.GoToPage(slideNum, false, false, false, true);
window.editor.WordControl.OnResizeReporter();
});
this.m_oApi.asc_registerCallback("asc_onEndDemonstration", function () {
try {
window.editor.sendFromReporter("{ \"reporter_command\" : \"end\" }");
}
catch (err) {
}
});
this.m_oApi.asc_registerCallback("asc_onDemonstrationFirstRun", function () {
var _elem = document.getElementById("dem_id_play_span");
_elem.classList.remove("btn-play");
_elem.classList.add("btn-pause");
var _wordControl = window.editor.WordControl;
_wordControl.reporterTimerLastStart = new Date().getTime();
_wordControl.reporterTimer = setInterval(_wordControl.reporterTimerFunc, 1000);
});
this.elementReporter1 = document.getElementById("dem_id_end");
this.elementReporter1.onclick = function () {
window.editor.EndDemonstration();
};
this.elementReporter2 = document.getElementById("dem_id_prev");
this.elementReporter2.onclick = function () {
window.editor.DemonstrationPrevSlide();
};
this.elementReporter3 = document.getElementById("dem_id_next");
this.elementReporter3.onclick = function () {
window.editor.DemonstrationNextSlide();
};
this.elementReporter4 = document.getElementById("dem_id_play");
this.elementReporter4.onclick = function () {
var _wordControl = window.editor.WordControl;
var _isNowPlaying = _wordControl.DemonstrationManager.IsPlayMode;
var _elem = document.getElementById("dem_id_play_span");
if (_isNowPlaying) {
window.editor.DemonstrationPause();
_elem.classList.remove("btn-pause");
_elem.classList.add("btn-play");
if (-1 != _wordControl.reporterTimer) {
clearInterval(_wordControl.reporterTimer);
_wordControl.reporterTimer = -1;
}
_wordControl.reporterTimerAdd = _wordControl.reporterTimerFunc(true);
window.editor.sendFromReporter("{ \"reporter_command\" : \"pause\" }");
}
else {
window.editor.DemonstrationPlay();
_elem.classList.remove("btn-play");
_elem.classList.add("btn-pause");
_wordControl.reporterTimerLastStart = new Date().getTime();
_wordControl.reporterTimer = setInterval(_wordControl.reporterTimerFunc, 1000);
window.editor.sendFromReporter("{ \"reporter_command\" : \"play\" }");
}
};
this.elementReporter5 = document.getElementById("dem_id_reset");
this.elementReporter5.onclick = function () {
var _wordControl = window.editor.WordControl;
_wordControl.reporterTimerAdd = 0;
_wordControl.reporterTimerLastStart = new Date().getTime();
_wordControl.reporterTimerFunc();
};
this.elementReporter6 = document.getElementById("dem_id_pointer");
this.elementReporter6.onclick = function () {
var _wordControl = window.editor.WordControl;
var _elem1 = document.getElementById("dem_id_pointer");
var _elem2 = document.getElementById("dem_id_pointer_span");
if (_wordControl.reporterPointer) {
_elem1.classList.remove("btn-text-default-img2");
_elem1.classList.add("btn-text-default-img");
_elem2.classList.remove("btn-pointer-active");
_elem2.classList.add("btn-pointer");
}
else {
_elem1.classList.remove("btn-text-default-img");
_elem1.classList.add("btn-text-default-img2");
_elem2.classList.remove("btn-pointer");
_elem2.classList.add("btn-pointer-active");
const elements = this.elementReporterDrawMenu.querySelectorAll("a[data-ratio]")
for (let i = 0; i < elements.length; i++) {
delete elements[i].dataset["checked"];
}
Asc.editor.asc_StopInkDrawer();
this.toggleElementReporterDrawMenuButton(false);
}
_wordControl.reporterPointer = !_wordControl.reporterPointer;
if (!_wordControl.reporterPointer)
_wordControl.DemonstrationManager.PointerRemove();
}.bind(this);
function createSolidPen(color, size, opacity) {
color = parseInt(color, 16);
const ascColor = new Asc.asc_CColor();
ascColor.asc_putType(Asc.c_oAscColor.COLOR_TYPE_SRGB);
ascColor.asc_putR(color >> 16);
ascColor.asc_putG((color & 0xff00) >> 8);
ascColor.asc_putB(color & 0xff);
ascColor.asc_putA(0xff);
const stroke = new Asc.asc_CStroke();
stroke.asc_putType(Asc.c_oAscStrokeType.STROKE_COLOR);
stroke.asc_putColor(ascColor);
stroke.asc_putPrstDash(Asc.c_oDashType.solid);
stroke.asc_putWidth(size);
stroke.asc_putTransparent(opacity * 2.55);
return stroke;
};
this.currentDrawColor = 'E81416';
const showCurrentColor = function () {
const elements = document.querySelectorAll(".menu-color-cell");
for (let i = 0; i < elements.length; i++) {
if (this.currentDrawColor === elements[i].getAttribute("data-value")) {
elements[i].dataset["current"] = "true";
} else {
delete elements[i].dataset["current"];
}
}
}.bind(this);
showCurrentColor();
this.elementReporterDrawMenu = document.getElementById("dem_id_draw_menu");
this.elementReporterDrawMenu.onclick = function (e) {
if (e.target.hasAttribute("data-ratio")) {
if (!!e.target.getAttribute("data-checked")) {
delete e.target.dataset["checked"];
Asc.editor.asc_StopInkDrawer();
this.toggleElementReporterDrawMenuButton(false);
} else {
const elements = this.elementReporterDrawMenu.querySelectorAll("a[data-ratio]")
for (let i = 0; i < elements.length; i++) {
delete elements[i].dataset["checked"];
}
e.target.dataset["checked"] = "true";
const currentTool = e.target.getAttribute("data-tool");
if (window.editor.WordControl.reporterPointer) {
this.elementReporter6.onclick()
}
let currentIcon;
switch (currentTool) {
case "pen":
currentIcon = "btn-pen";
Asc.editor.asc_StartDrawInk(createSolidPen(this.currentDrawColor, 1, 100));
break;
case "highlighter":
currentIcon = "btn-highlighter";
Asc.editor.asc_StartDrawInk(createSolidPen(this.currentDrawColor, 6, 50));
break;
case "eraser":
currentIcon = "btn-eraser";
Asc.editor.asc_StartInkEraser();
break;
}
this.toggleElementReporterDrawMenuButton(true, currentIcon);
}
this.elementReporterDrawMenu.style.display = "none";
}
if (e.target.getAttribute("data-tool") === "erase-all") {
Asc.editor.asc_EraseAllInksOnSlide();
this.elementReporterDrawMenu.style.display = "none";
}
}.bind(this);
let isMenuHovered = false;
const drawColorsMenuTrigger = jQuery("#dem_id_draw_color_menu_trigger");
drawColorsMenuTrigger.on('mouseenter', function (e) {
if (!isMenuHovered) {
const offset = AscCommon.UI.getBoundingClientRect(e.target);
const menuWidth = 174;
let leftPosition = offset.left + offset.width;
if (leftPosition + menuWidth > window.innerWidth) {
leftPosition = offset.left - menuWidth;
}
this.elementReporterDrawColorsMenu.css({
display: "block",
top: offset.top + "px",
left: leftPosition + "px"
});
}
}.bind(this));
drawColorsMenuTrigger.on('mouseleave', function () {
if (!isMenuHovered) {
this.elementReporterDrawColorsMenu.css("display", "none");
}
}.bind(this));
this.elementReporterDrawColorsMenu = jQuery("#dem_id_draw_color_menu");
this.elementReporterDrawColorsMenu.css({
"z-index": 2,
"padding": "5px"
});
this.toggleElementReporterDrawMenuButton = function(state, icon) {
icon = undefined !== icon ? icon : "btn-pen";
const btnIcon = document.getElementById("dem_id_draw_menu_trigger_span");
let currentIcon;
const classList = btnIcon.classList;
for (let i = 0; i < classList.length; i++) {
if (classList[i].indexOf("btn-") !== -1) {
currentIcon = classList[i];
break;
}
}
if (currentIcon) {
btnIcon.classList.remove(currentIcon);
}
if (state) {
this.elementReporterDrawMenuTrigger.classList.add("btn-text-default-img2");
this.elementReporterDrawMenuTrigger.classList.remove("btn-text-default-img");
} else {
this.elementReporterDrawMenuTrigger.classList.remove("btn-text-default-img2");
this.elementReporterDrawMenuTrigger.classList.add("btn-text-default-img");
}
btnIcon.classList.add(state ? icon + "-active" : icon);
}.bind(this);
this.elementReporterDrawColorsMenu.on('click', function (e) {
const checkedMenuItem = this.elementReporterDrawMenu.querySelector("a[data-checked]");
this.currentDrawColor = e.target.getAttribute("data-value");
showCurrentColor();
if (window.editor.WordControl.reporterPointer) {
this.elementReporter6.onclick()
}
if ((checkedMenuItem && checkedMenuItem.getAttribute("data-tool") === "eraser") || !checkedMenuItem) {
Asc.editor.asc_StartDrawInk(createSolidPen(this.currentDrawColor, 1, 100));
const elements = this.elementReporterDrawMenu.querySelectorAll("a[data-ratio]")
for (let i = 0; i < elements.length; i++) {
delete elements[i].dataset["checked"];
}
this.toggleElementReporterDrawMenuButton(true);
this.elementReporterDrawMenu.querySelector("a[data-tool=\"pen\"]").dataset["checked"] = "true";
} else {
if (checkedMenuItem.getAttribute("data-tool") === "pen") {
Asc.editor.asc_StartDrawInk(createSolidPen(this.currentDrawColor, 1, 100));
} else {
Asc.editor.asc_StartDrawInk(createSolidPen(this.currentDrawColor, 6, 50));
}
}
this.elementReporterDrawMenu.style.display = "none";
}.bind(this));
this.elementReporterDrawMenuTrigger = document.getElementById("dem_id_draw_menu_trigger");
this.elementReporterDrawMenuTrigger.onclick = function (e) {
e.stopPropagation();
const drawMenu = document.getElementById("dem_id_draw_menu");
const _draw_menu_trigger = document.getElementById("dem_id_draw_menu_trigger");
const _draw_menu_trigger_offset = AscCommon.UI.getBoundingClientRect(_draw_menu_trigger);
function handleOutsideClose(e) {
if (drawMenu.contains(e.target) || drawMenu === e.target) {
return;
}
drawMenu.style.display = "none";
window.removeEventListener('click', handleOutsideClose);
}
if (drawMenu.style.display === "block") {
drawMenu.style.display = "none";
} else {
drawMenu.style.display = "block";
drawMenu.style.left = _draw_menu_trigger_offset.left + (_draw_menu_trigger.offsetWidth - drawMenu.offsetWidth) / 2 + "px";
drawMenu.style.top = _draw_menu_trigger_offset.top - _draw_menu_trigger.offsetHeight - drawMenu.offsetHeight + "px";
window.addEventListener('click', handleOutsideClose);
}
};
// Tooltip
if (!this.reporterTooltip) {
this.reporterTooltip = document.createElement('div');
this.reporterTooltip.className = 'tooltip';
this.reporterTooltip.id = 'dem_tooltip';
document.body.appendChild(this.reporterTooltip);
}
const showTooltip = function (element, text, delay) {
delay = undefined !== delay ? delay : 500;
if (!!this.reporterTooltipTimeout) {
clearTimeout(this.reporterTooltipTimeout);
}
this.reporterTooltipTimeout = setTimeout(function () {
this.reporterTooltip.textContent = text;
const rect = AscCommon.UI.getBoundingClientRect(element);
const tooltipRect = AscCommon.UI.getBoundingClientRect(this.reporterTooltip);
let left = rect.left + (rect.width / 2) - (tooltipRect.width / 2);
let top = rect.top - tooltipRect.height - 10;
if (left < 5) {
left = 5;
}
if (left + tooltipRect.width > window.innerWidth - 5) {
left = window.innerWidth - tooltipRect.width - 5;
}
this.reporterTooltip.style.left = left + 'px';
this.reporterTooltip.style.top = top + 'px';
this.reporterTooltip.classList.add('show');
}.bind(this), delay);
}.bind(this);
const hideTooltip = function () {
if (!!this.reporterTooltipTimeout) {
clearTimeout(this.reporterTooltipTimeout);
this.reporterTooltipTimeout = null;
}
if (!!this.reporterTooltip) {
this.reporterTooltip.classList.remove('show');
}
}.bind(this);
function addReporterTooltipToElement(element) {
if (!element) {
return;
}
element.addEventListener('mouseenter', function (e) {
showTooltip(e.target, e.target.getAttribute('data-tooltip'));
});
element.addEventListener('mouseleave', function () {
hideTooltip();
});
element.addEventListener('mousedown', function () {
hideTooltip();
});
}
addReporterTooltipToElement(this.elementReporter2);
addReporterTooltipToElement(this.elementReporter3);
addReporterTooltipToElement(this.elementReporter6);
addReporterTooltipToElement(this.elementReporterDrawMenuTrigger);
if (this.elementReporter4) {
this.elementReporter4.addEventListener('mouseenter', function(e) {
const isPlaying = window.editor.WordControl.DemonstrationManager.IsPlayMode;
showTooltip(e.target, isPlaying ? e.target.getAttribute('data-pause-tooltip') : e.target.getAttribute('data-play-tooltip'));
});
this.elementReporter4.addEventListener('mouseleave', function() {
hideTooltip();
});
this.elementReporter4.addEventListener('mousedown', function() {
hideTooltip();
});
}
window.onkeydown = this.onKeyDown;
window.onkeyup = this.onKeyUp;
if (!window["AscDesktopEditor"]) {
if (window.attachEvent)
window.attachEvent('onmessage', this.m_oApi.DemonstrationToReporterMessages);
else
window.addEventListener('message', this.m_oApi.DemonstrationToReporterMessages, false);
}
document.oncontextmenu = function (e) {
AscCommon.stopEvent(e);
return false;
};
} else {
this.setMouseMode(this.m_oApi.mouseMode);
window.addEventListener && window.addEventListener(
"beforeunload",
function (e) {window.editor.DemonstrationReporterEnd();}
);
this.m_oBody.HtmlElement.oncontextmenu = function (e) {
if (AscCommon.AscBrowser.isVivaldiLinux)
AscCommon.Window_OnMouseUp(e);
AscCommon.stopEvent(e);
return false;
};
}
this.m_oApi.asc_registerCallback("asc_onEndDemoWithAnnotations", function (fCallback)
{
fCallback(false);
});
this.m_oDrawingDocument.TargetHtmlElement = document.getElementById('id_target_cursor');
if (this.IsNotesSupported()) {
this.m_oNotes.HtmlElement.style.backgroundColor = GlobalSkin.BackgroundColor;
this.m_oNotesContainer.HtmlElement.style.backgroundColor = GlobalSkin.BackgroundColor;
this.m_oBottomPanesContainer.HtmlElement.style.borderTop = ("1px solid " + GlobalSkin.BorderSplitterColor);
this.m_oBottomPanesContainer.HtmlElement.style.backgroundColor = GlobalSkin.BackgroundColor;
this.m_oAnimationPaneContainer.HtmlElement.style.borderTop = ("1px solid " + GlobalSkin.BorderSplitterColor);
}
this.m_oOverlayApi.m_oControl = this.m_oOverlay;
this.m_oOverlayApi.m_oHtmlPage = this;
this.m_oOverlayApi.Clear();
this.ShowOverlay();
this.m_oDrawingDocument.AutoShapesTrack = new AscCommon.CAutoshapeTrack();
this.m_oDrawingDocument.AutoShapesTrack.init2(this.m_oOverlayApi);
this.SlideDrawer.m_oWordControl = this;
this.checkNeedRules();
this.initEvents();
this.OnResize(true);
this.m_oNotesApi = new CNotesDrawer(this);
this.m_oNotesApi.Init();
if (this.IsSupportAnimPane) {
this.m_oAnimPaneApi = new CAnimationPaneDrawer(this, this.m_oAnimationPaneContainer.HtmlElement);
this.m_oAnimPaneApi.Init();
}
if (this.m_oApi.isReporterMode)
this.m_oApi.StartDemonstration(this.Name, 0);
if (AscCommon.AscBrowser.isIE && !AscCommon.AscBrowser.isIeEdge) {
var ie_hack = [
this.m_oThumbnailsBack,
this.m_oThumbnails,
this.m_oMainContent,
this.m_oEditor,
this.m_oOverlay
];
for (var elem in ie_hack) {
if (ie_hack[elem] && ie_hack[elem].HtmlElement)
ie_hack[elem].HtmlElement.style.zIndex = 0;
}
}
};
CEditorPage.prototype.initThumbnails = function () {
this.m_oThumbnailsContainer = CreateControlContainer("id_panel_thumbnails");
this.m_oBody.AddControl(this.m_oThumbnailsContainer);
this.m_oThumbnailsBack = CreateControl("id_thumbnails_background");
this.m_oThumbnailsContainer.AddControl(this.m_oThumbnailsBack);
this.m_oThumbnails = CreateControl("id_thumbnails");
this.m_oThumbnailsContainer.AddControl(this.m_oThumbnails);
// TODO: 'id_vertical_scroll_thmbnl' is no longer always vertical (since thumbnails can be horizontal)
this.m_oThumbnails_scroll = CreateControl("id_vertical_scroll_thmbnl");
this.m_oThumbnailsContainer.AddControl(this.m_oThumbnails_scroll);
this.m_oThumbnailsSplit = CreateControlContainer("id_panel_thumbnails_split");
this.m_oBody.AddControl(this.m_oThumbnailsSplit);
if (this.m_oApi.isMobileVersion) {
this.m_oThumbnails_scroll.HtmlElement.style.display = "none";
}
};
CEditorPage.prototype.initMainContent = function () {
this.m_oMainParent = CreateControlContainer("id_main_parent");
this.m_oBody.AddControl(this.m_oMainParent);
this.m_oMainContent = CreateControlContainer("id_main");
this.m_oMainParent.AddControl(this.m_oMainContent);
this.m_oPanelRight = CreateControlContainer("id_panel_right");
this.m_oMainContent.AddControl(this.m_oPanelRight);
this.m_oPanelRight_buttonRulers = CreateControl("id_buttonRulers");
this.m_oPanelRight.AddControl(this.m_oPanelRight_buttonRulers);
if (GlobalSkin.RulersButton === false) {
this.m_oPanelRight_buttonRulers.HtmlElement.style.display = "none";
}
this.m_oPanelRight_buttonNextPage = CreateControl("id_buttonNextPage");
this.m_oPanelRight.AddControl(this.m_oPanelRight_buttonNextPage);
this.m_oPanelRight_buttonPrevPage = CreateControl("id_buttonPrevPage");
this.m_oPanelRight.AddControl(this.m_oPanelRight_buttonPrevPage);
if (GlobalSkin.NavigationButtons == false) {
this.m_oPanelRight_buttonNextPage.HtmlElement.style.display = "none";
this.m_oPanelRight_buttonPrevPage.HtmlElement.style.display = "none";
}
this.m_oPanelRight_vertScroll = CreateControl("id_vertical_scroll");
this.m_oPanelRight.AddControl(this.m_oPanelRight_vertScroll);
if (this.m_oApi.isMobileVersion) {
this.m_oPanelRight.HtmlElement.style.display = "none";
}
// --- left ---
this.m_oLeftRuler = CreateControlContainer("id_panel_left");
this.m_oMainContent.AddControl(this.m_oLeftRuler);
this.m_oLeftRuler_buttonsTabs = CreateControl("id_buttonTabs");
this.m_oLeftRuler.AddControl(this.m_oLeftRuler_buttonsTabs);
this.m_oLeftRuler_vertRuler = CreateControl("id_vert_ruler");
this.m_oLeftRuler.AddControl(this.m_oLeftRuler_vertRuler);
// ------------
// --- top ----
this.m_oTopRuler = CreateControlContainer("id_panel_top");
this.m_oMainContent.AddControl(this.m_oTopRuler);
this.m_oTopRuler_horRuler = CreateControl("id_hor_ruler");
this.m_oTopRuler.AddControl(this.m_oTopRuler_horRuler);
// ------------
// scroll hor --
this.m_oScrollHor = CreateControlContainer("id_horscrollpanel");
this.m_oMainContent.AddControl(this.m_oScrollHor);
// Others
this.m_oMainView = CreateControlContainer("id_main_view");
this.m_oMainContent.AddControl(this.m_oMainView);
// проблема с фокусом fixed-позиционированного элемента внутри (bug 63194)
this.m_oMainView.HtmlElement.onscroll = function () {
this.scrollTop = 0;
};
this.m_oEditor = CreateControl("id_viewer");
this.m_oMainView.AddControl(this.m_oEditor);
this.m_oOverlay = CreateControl("id_viewer_overlay");
this.m_oMainView.AddControl(this.m_oOverlay);
};
CEditorPage.prototype.initNotes = function () {
this.m_oNotesContainer = CreateControlContainer("id_panel_notes");
this.m_oNotesContainer.Bounds.SetParams(0, 0, g_dKoef_pix_to_mm, 1000, true, false, true, false, -1, -1);
this.m_oNotesContainer.Anchor = (g_anchor_left | g_anchor_right | g_anchor_top);
this.m_oBottomPanesContainer.AddControl(this.m_oNotesContainer);
this.m_oNotes = CreateControl("id_notes");
this.m_oNotes.Bounds.SetParams(0, 0, this.ScrollWidthMm, 1000, false, false, true, false, -1, -1);
this.m_oNotes.Anchor = (g_anchor_left | g_anchor_top | g_anchor_right | g_anchor_bottom);
this.m_oNotesContainer.AddControl(this.m_oNotes);
this.m_oNotesOverlay = CreateControl("id_notes_overlay");
this.m_oNotesOverlay.Bounds.SetParams(0, 0, this.ScrollWidthMm, 1000, false, false, true, false, -1, -1);
this.m_oNotesOverlay.Anchor = (g_anchor_left | g_anchor_top | g_anchor_right | g_anchor_bottom);
this.m_oNotesContainer.AddControl(this.m_oNotesOverlay);
this.m_oNotes_scroll = CreateControl("id_vertical_scroll_notes");
this.m_oNotes_scroll.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, this.ScrollWidthMm, -1);
this.m_oNotes_scroll.Anchor = (g_anchor_top | g_anchor_right | g_anchor_bottom);
this.m_oNotesContainer.AddControl(this.m_oNotes_scroll);
if (!GlobalSkin.SupportNotes) {
this.m_oNotesContainer.HtmlElement.style.display = "none";
}
};
CEditorPage.prototype.initAnimationPane = function () {
this.m_oAnimationPaneContainer = CreateControlContainer("id_panel_animation");
this.m_oAnimationPaneContainer.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, -1, -1);
this.m_oAnimationPaneContainer.Anchor = (g_anchor_left | g_anchor_right | g_anchor_bottom);
this.m_oBottomPanesContainer.AddControl(this.m_oAnimationPaneContainer);
this.m_oAnimPaneHeaderContainer = CreateControlContainer("id_anim_header");
this.m_oAnimPaneHeaderContainer.Bounds.SetParams(0, 0, 1000, HEADER_HEIGHT, true, false, false, true, -1, HEADER_HEIGHT);
this.m_oAnimPaneHeaderContainer.Anchor = (g_anchor_left | g_anchor_right | g_anchor_top);
this.m_oAnimationPaneContainer.AddControl(this.m_oAnimPaneHeaderContainer);
this.m_oAnimPaneHeader = CreateControl("id_anim_header_canvas");
this.m_oAnimPaneHeader.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, -1, -1);
this.m_oAnimPaneHeader.Anchor = (g_anchor_left | g_anchor_right | g_anchor_top | g_anchor_bottom);
this.m_oAnimPaneHeaderContainer.AddControl(this.m_oAnimPaneHeader);
this.m_oAnimPaneListContainer = CreateControlContainer("id_anim_list_container");
this.m_oAnimPaneListContainer.Bounds.SetParams(0, HEADER_HEIGHT, 0, TIMELINE_HEIGHT, true, true, true, true, -1, -1);
this.m_oAnimPaneListContainer.Anchor = (g_anchor_left | g_anchor_right | g_anchor_top | g_anchor_bottom);
this.m_oAnimationPaneContainer.AddControl(this.m_oAnimPaneListContainer);
this.m_oAnimPaneList = CreateControl("id_anim_list_canvas");
this.m_oAnimPaneList.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, -1, -1);
this.m_oAnimPaneList.Anchor = (g_anchor_left | g_anchor_right | g_anchor_top | g_anchor_bottom);
this.m_oAnimPaneListContainer.AddControl(this.m_oAnimPaneList);
this.m_oAnimPaneList_scroll = CreateControl("id_anim_list_scroll");
this.m_oAnimPaneList_scroll.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, this.ScrollWidthMm, -1);
this.m_oAnimPaneList_scroll.Anchor = (g_anchor_top | g_anchor_right | g_anchor_bottom);
this.m_oAnimPaneListContainer.AddControl(this.m_oAnimPaneList_scroll);
this.m_oAnimPaneTimelineContainer = CreateControlContainer("id_anim_timeline_container");
this.m_oAnimPaneTimelineContainer.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, -1, TIMELINE_HEIGHT);
this.m_oAnimPaneTimelineContainer.Anchor = (g_anchor_left | g_anchor_right | g_anchor_bottom);
this.m_oAnimationPaneContainer.AddControl(this.m_oAnimPaneTimelineContainer);
this.m_oAnimPaneTimeline = CreateControl("id_anim_timeline_canvas");
this.m_oAnimPaneTimeline.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, -1, -1);
this.m_oAnimPaneTimeline.Anchor = (g_anchor_left | g_anchor_right | g_anchor_top | g_anchor_bottom);
this.m_oAnimPaneTimelineContainer.AddControl(this.m_oAnimPaneTimeline);
if (!this.IsSupportAnimPane) {
this.m_oAnimationPaneContainer.HtmlElement.style.display = "none";
}
};
CEditorPage.prototype.recalculateThumbnailsBounds = function () {
const scrollWidth = 10 * g_dKoef_pix_to_mm;
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.left) {
this.m_oThumbnailsContainer.Bounds.SetParams(0, 0, this.splitters[0].position, 1000, false, false, true, false, this.splitters[0].position, -1);
this.m_oThumbnailsContainer.Anchor = (g_anchor_left | g_anchor_top | g_anchor_bottom);
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.right) {
this.m_oThumbnailsContainer.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, this.splitters[0].position, -1);
this.m_oThumbnailsContainer.Anchor = (g_anchor_top | g_anchor_right | g_anchor_bottom);
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom) {
this.m_oThumbnailsContainer.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, -1, this.splitters[0].position);
this.m_oThumbnailsContainer.Anchor = (g_anchor_left | g_anchor_right | g_anchor_bottom);
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.left || Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.right) {
Asc.editor.isRtlInterface
? this.m_oThumbnailsBack.Bounds.SetParams(scrollWidth, 0, 1000, 1000, true, false, false, false, -1, -1)
: this.m_oThumbnailsBack.Bounds.SetParams(0, 0, scrollWidth, 1000, false, false, true, false, -1, -1);
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom) {
this.m_oThumbnailsBack.Bounds.SetParams(0, 0, 1000, scrollWidth, false, false, false, true, -1, -1);
}
this.m_oThumbnailsBack.Anchor = (g_anchor_left | g_anchor_top | g_anchor_right | g_anchor_bottom);
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.left || Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.right) {
Asc.editor.isRtlInterface
? this.m_oThumbnails.Bounds.SetParams(scrollWidth, 0, 1000, 1000, true, false, false, false, -1, -1)
: this.m_oThumbnails.Bounds.SetParams(0, 0, scrollWidth, 1000, false, false, true, false, -1, -1);
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom) {
this.m_oThumbnails.Bounds.SetParams(0, 0, 1000, scrollWidth, false, false, false, true, -1, -1);
}
this.m_oThumbnails.Anchor = (g_anchor_left | g_anchor_top | g_anchor_right | g_anchor_bottom);
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.left || Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.right) {
if (Asc.editor.isRtlInterface) {
this.m_oThumbnails_scroll.Bounds.SetParams(0, 0, scrollWidth, 1000, false, false, true, false, scrollWidth, -1);
this.m_oThumbnails_scroll.Anchor = (g_anchor_left | g_anchor_top | g_anchor_bottom);
} else {
this.m_oThumbnails_scroll.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, scrollWidth, -1);
this.m_oThumbnails_scroll.Anchor = (g_anchor_top | g_anchor_right | g_anchor_bottom);
}
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom) {
this.m_oThumbnails_scroll.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, -1, scrollWidth);
this.m_oThumbnails_scroll.Anchor = (g_anchor_left | g_anchor_right | g_anchor_bottom);
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.left) {
this.m_oThumbnailsSplit.Bounds.SetParams(this.splitters[0].position, 0, 1000, 1000, true, false, false, false, GlobalSkin.SplitterWidthMM, -1);
this.m_oThumbnailsSplit.Anchor = (g_anchor_left | g_anchor_top | g_anchor_bottom);
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.right) {
this.m_oThumbnailsSplit.Bounds.SetParams(0, 0, this.splitters[0].position, 1000, false, false, true, false, GlobalSkin.SplitterWidthMM, -1);
this.m_oThumbnailsSplit.Anchor = (g_anchor_top | g_anchor_right | g_anchor_bottom);
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom) {
this.m_oThumbnailsSplit.Bounds.SetParams(0, 0, 1000, this.splitters[0].position, false, false, false, true, -1, GlobalSkin.SplitterWidthMM);
this.m_oThumbnailsSplit.Anchor = (g_anchor_left | g_anchor_right | g_anchor_bottom);
}
};
CEditorPage.prototype.recalculateMainContentBounds = function () {
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.left) {
this.m_oMainParent.Bounds.SetParams(this.splitters[0].position + GlobalSkin.SplitterWidthMM, 0, g_dKoef_pix_to_mm, 1000, true, false, true, false, -1, -1);
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.right) {
this.m_oMainParent.Bounds.SetParams(0, 0, this.splitters[0].position + GlobalSkin.SplitterWidthMM, 1000, false, false, true, false, -1, -1);
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom) {
this.m_oMainParent.Bounds.SetParams(0, 0, 1000, this.splitters[0].position + GlobalSkin.SplitterWidthMM, false, false, false, true, -1, -1);
}
this.m_oMainContent.Bounds.SetParams(0, 0, g_dKoef_pix_to_mm, this.splitters[1].position + GlobalSkin.SplitterWidthMM, true, false, true, true, -1, -1);
this.m_oMainContent.Anchor = (g_anchor_left | g_anchor_top | g_anchor_right | g_anchor_bottom);
this.m_oPanelRight.Bounds.SetParams(0, 0, 1000, this.ScrollWidthMm, false, false, false, true, this.ScrollWidthMm, -1);
this.m_oPanelRight.Anchor = (g_anchor_top | g_anchor_right | g_anchor_bottom);
this.m_oPanelRight_buttonRulers.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, -1, this.ScrollWidthMm);
this.m_oPanelRight_buttonRulers.Anchor = (g_anchor_left | g_anchor_top | g_anchor_right);
this.m_oPanelRight_buttonNextPage.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, -1, this.ScrollWidthMm);
this.m_oPanelRight_buttonNextPage.Anchor = (g_anchor_left | g_anchor_bottom | g_anchor_right);
this.m_oPanelRight_buttonPrevPage.Bounds.SetParams(0, 0, 1000, this.ScrollWidthMm, false, false, false, true, -1, this.ScrollWidthMm);
this.m_oPanelRight_buttonPrevPage.Anchor = (g_anchor_left | g_anchor_bottom | g_anchor_right);
const _vertScrollTop = GlobalSkin.RulersButton === false ? 0 : this.ScrollWidthMm;
const _vertScrollBottom = GlobalSkin.NavigationButtons == false ? 0 : 2 * this.ScrollWidthMm;
this.m_oPanelRight_vertScroll.Bounds.SetParams(0, _vertScrollTop, 1000, _vertScrollBottom, false, true, false, true, -1, -1);
this.m_oPanelRight_vertScroll.Anchor = (g_anchor_left | g_anchor_top | g_anchor_right | g_anchor_bottom);
this.m_oLeftRuler.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, 5, -1);
this.m_oLeftRuler.Anchor = (g_anchor_left | g_anchor_top | g_anchor_bottom);
this.m_oLeftRuler_buttonsTabs.Bounds.SetParams(0, 0.8, 1000, 1000, false, true, false, false, -1, 5);
this.m_oLeftRuler_buttonsTabs.Anchor = (g_anchor_left | g_anchor_top | g_anchor_right);
this.m_oLeftRuler_vertRuler.Bounds.SetParams(0, 7, 1000, 1000, false, true, false, false, -1, -1);
this.m_oLeftRuler_vertRuler.Anchor = (g_anchor_left | g_anchor_right | g_anchor_top | g_anchor_bottom);
this.m_oTopRuler.Bounds.SetParams(5, 0, 1000, 1000, true, false, false, false, -1, 7);
this.m_oTopRuler.Anchor = (g_anchor_left | g_anchor_top | g_anchor_right);
this.m_oTopRuler_horRuler.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, -1, -1);
this.m_oTopRuler_horRuler.Anchor = (g_anchor_left | g_anchor_right | g_anchor_top | g_anchor_bottom);
this.m_oScrollHor.Bounds.SetParams(0, 0, this.ScrollWidthMm, 1000, false, false, true, false, -1, this.ScrollWidthMm);
this.m_oScrollHor.Anchor = (g_anchor_left | g_anchor_right | g_anchor_bottom);
const useScrollW = (this.m_oApi.isMobileVersion || this.m_oApi.isReporterMode) ? 0 : this.ScrollWidthMm;
this.m_oMainView.Bounds.SetParams(5, 7, useScrollW, useScrollW, true, true, true, true, -1, -1);
this.m_oMainView.Anchor = (g_anchor_left | g_anchor_right | g_anchor_top | g_anchor_bottom);
this.m_oEditor.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, -1, -1);
this.m_oEditor.Anchor = (g_anchor_left | g_anchor_top | g_anchor_right | g_anchor_bottom);
this.m_oOverlay.Bounds.SetParams(0, 0, 1000, 1000, false, false, false, false, -1, -1);
this.m_oOverlay.Anchor = (g_anchor_left | g_anchor_top | g_anchor_right | g_anchor_bottom);
};
// Controls
CEditorPage.prototype.GetMainContentBounds = function () {
return this.m_oMainParent.AbsolutePosition;
};
CEditorPage.prototype.checkBodyOffset = function () {
let element = this.m_oBody.HtmlElement;
if (!element)
element = document.getElementById(this.Name);
if (!element)
return;
var pos = AscCommon.UI.getBoundingClientRect(element);
if (pos) {
if (undefined !== pos.x)
this.X = pos.x;
else if (undefined !== pos.left)
this.X = pos.left;
if (undefined !== pos.y)
this.Y = pos.y;
else if (undefined !== pos.top)
this.Y = pos.top;
}
};
CEditorPage.prototype.checkBodySize = function () {
this.checkBodyOffset();
const element = document.getElementById(this.Name);
if (!element)
return;
const rect = AscCommon.UI.getBoundingClientRect(element);
if (!rect)
return;
let hasSizeChanges = false;
if (AscFormat.isRealNumber(rect.width)) {
const newWidth = Math.floor(rect.width);
if (this.Width != newWidth) {
this.Width = newWidth;
hasSizeChanges = true;
}
}
if (AscFormat.isRealNumber(rect.height)) {
const newHeight = Math.floor(rect.height);
if (this.Height != newHeight) {
this.Height = newHeight;
hasSizeChanges = true;
}
}
return hasSizeChanges;
};
// Retina checks
CEditorPage.prototype.CheckRetinaDisplay = function () {
if (this.retinaScaling !== AscCommon.AscBrowser.retinaPixelRatio) {
this.retinaScaling = AscCommon.AscBrowser.retinaPixelRatio;
this.m_oDrawingDocument.ClearCachePages();
this.onButtonTabsDraw();
}
};
CEditorPage.prototype.CheckRetinaElement = function (htmlElem) {
switch (htmlElem.id) {
case "id_viewer":
case "id_viewer_overlay":
case "id_hor_ruler":
case "id_vert_ruler":
case "id_buttonTabs":
case "id_notes":
case "id_notes_overlay":
case "id_thumbnails_background":
case "id_thumbnails":
case "id_anim_header_canvas":
case "id_anim_list_canvas":
case "id_anim_timeline_canvas":
return true;
default:
break;
}
return false;
};
CEditorPage.prototype.CheckRetinaElement2 = function (htmlElem) {
switch (htmlElem.id) {
case "id_viewer":
case "id_viewer_overlay":
case "id_notes":
case "id_notes_overlay":
return true;
default:
break;
}
return false;
};
CEditorPage.prototype.GetVertRulerLeft = function()
{
return 0;
};
// Splitter elements
CEditorPage.prototype.createSplitterElement = function (splitterIndex) {
const splitterElement = document.createElement("div");
const position = Math.round(this.splitters[splitterIndex - 1].position * g_dKoef_mm_to_pix);
const splitterWidth = Math.round(GlobalSkin.SplitterWidthMM * g_dKoef_mm_to_pix);
splitterElement.id = 'splitter_id';
splitterElement.style.position = 'absolute';
splitterElement.style.backgroundImage = 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjMxN4N3hgAAAB9JREFUGFdj+P//PwsDAwOQ+m8PooEYwQELwmRwqgAAbXwhnmjs9sgAAAAASUVORK5CYII=)';
splitterElement.style.overflow = 'hidden';
splitterElement.style.zIndex = 1000;
splitterElement.setAttribute('contentEditable', false);
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom) {
const bottom = splitterIndex === 1
? this.Height
: this.Height - Math.round(this.splitters[0].position * g_dKoef_mm_to_pix);
splitterElement.style.left = '0px';
splitterElement.style.top = bottom - position - splitterWidth + 'px';
splitterElement.style.width = this.Width + 'px';
splitterElement.style.height = splitterWidth + 'px';
splitterElement.style.backgroundRepeat = 'repeat-x';
} else {
const isThumbnailsSplitter = splitterIndex === 1;
if (isThumbnailsSplitter) {
splitterElement.style.left = Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.left
? position + 'px'
: this.Width - position - splitterWidth + 'px';
splitterElement.style.top = '0px';
splitterElement.style.width = splitterWidth + 'px';
splitterElement.style.height = this.Height + 'px';
splitterElement.style.backgroundRepeat = 'repeat-y';
} else {
const thumbnailsSplitterPosition = Math.round(this.splitters[0].position * g_dKoef_mm_to_pix);
splitterElement.style.left = Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.left
? thumbnailsSplitterPosition + splitterWidth + 'px'
: '0px';
splitterElement.style.top = this.Height - position - splitterWidth + 'px';
splitterElement.style.width = this.Width - thumbnailsSplitterPosition - splitterWidth + 'px';
splitterElement.style.height = splitterWidth + 'px';
splitterElement.style.backgroundRepeat = 'repeat-x';
}
}
this.SplitterDiv = splitterElement;
this.SplitterType = splitterIndex;
this.m_oBody.HtmlElement.appendChild(this.SplitterDiv);
};
CEditorPage.prototype.hitToSplitter = function () {
let nResult = 0;
const oWordControl = oThis;
const splitterWidth = GlobalSkin.SplitterWidthMM * g_dKoef_mm_to_pix;
const mouseX = global_mouseEvent.X - oWordControl.X;
const mouseY = global_mouseEvent.Y - oWordControl.Y;
let thumbnailsSplitterPosition, notesSplitterPosition, animPaneSplitterPosition;
let isWithinThumbnailsSplitter, isWithinNotesSplitter, isWithinAnimPaneSplitter;
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.left) {
thumbnailsSplitterPosition = oWordControl.splitters[0].position * g_dKoef_mm_to_pix;
notesSplitterPosition = oWordControl.Height - (oWordControl.splitters[1].position * g_dKoef_mm_to_pix + splitterWidth);
animPaneSplitterPosition = oWordControl.Height - (oWordControl.splitters[2].position * g_dKoef_mm_to_pix + splitterWidth);
isWithinThumbnailsSplitter = mouseX >= thumbnailsSplitterPosition && mouseX <= thumbnailsSplitterPosition + splitterWidth && mouseY >= 0 && mouseY <= oWordControl.Height;
isWithinNotesSplitter = mouseX >= thumbnailsSplitterPosition + splitterWidth && mouseX <= oWordControl.Width && mouseY >= notesSplitterPosition && mouseY <= notesSplitterPosition + splitterWidth;
isWithinAnimPaneSplitter = mouseX >= thumbnailsSplitterPosition + splitterWidth && mouseX <= oWordControl.Width && mouseY >= animPaneSplitterPosition && mouseY <= animPaneSplitterPosition + splitterWidth;
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.right) {
thumbnailsSplitterPosition = oWordControl.Width - oWordControl.splitters[0].position * g_dKoef_mm_to_pix - splitterWidth;
notesSplitterPosition = oWordControl.Height - (oWordControl.splitters[1].position * g_dKoef_mm_to_pix + splitterWidth);
animPaneSplitterPosition = oWordControl.Height - (oWordControl.splitters[2].position * g_dKoef_mm_to_pix + splitterWidth);
isWithinThumbnailsSplitter = mouseX >= thumbnailsSplitterPosition && mouseX <= thumbnailsSplitterPosition + splitterWidth && mouseY >= 0 && mouseY <= oWordControl.Height;
isWithinNotesSplitter = mouseX >= 0 && mouseX <= thumbnailsSplitterPosition && mouseY >= notesSplitterPosition && mouseY <= notesSplitterPosition + splitterWidth;
isWithinAnimPaneSplitter = mouseX >= 0 && mouseX <= thumbnailsSplitterPosition && mouseY >= animPaneSplitterPosition && mouseY <= animPaneSplitterPosition + splitterWidth;
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom) {
thumbnailsSplitterPosition = oWordControl.Height - (oWordControl.splitters[0].position * g_dKoef_mm_to_pix + splitterWidth);
notesSplitterPosition = thumbnailsSplitterPosition - (oWordControl.splitters[1].position * g_dKoef_mm_to_pix + splitterWidth);
animPaneSplitterPosition = thumbnailsSplitterPosition - (oWordControl.splitters[2].position * g_dKoef_mm_to_pix + splitterWidth);
isWithinThumbnailsSplitter = mouseY >= thumbnailsSplitterPosition && mouseY <= thumbnailsSplitterPosition + splitterWidth && mouseX >= 0 && mouseX <= oWordControl.Width;
isWithinNotesSplitter = mouseX >= 0 && mouseX <= oWordControl.Width && mouseY >= notesSplitterPosition && mouseY <= notesSplitterPosition + splitterWidth;
isWithinAnimPaneSplitter = mouseX >= 0 && mouseX <= oWordControl.Width && mouseY >= animPaneSplitterPosition && mouseY <= animPaneSplitterPosition + splitterWidth;
}
if (isWithinThumbnailsSplitter && (oThis.IsUseNullThumbnailsSplitter || oThis.splitters[0].position != 0)) {
nResult = 1;
} else if (isWithinNotesSplitter) {
nResult = 2;
} else if (isWithinAnimPaneSplitter && oThis.IsAnimPaneShown()) {
nResult = 3;
}
//check event sender to prevent tracking after click on menu elements (bug 60586)
if (nResult !== 0) {
if (global_mouseEvent.Sender) {
let oThContainer, oMainContainer, oBodyElement;
let oSender = global_mouseEvent.Sender;
if (this.m_oThumbnailsContainer) {
oThContainer = this.m_oThumbnailsContainer.HtmlElement;
}
if (this.m_oMainParent) {
oMainContainer = this.m_oMainParent.HtmlElement;
}
if (this.m_oBody) {
oBodyElement = this.m_oBody.HtmlElement;
}
if (!(oThContainer && oThContainer.contains(oSender) ||
oMainContainer && oMainContainer.contains(oSender) ||
oBodyElement && oSender.contains(oBodyElement))) {
return 0;
}
}
}
return nResult;
};
// Event handlers
CEditorPage.prototype.onBodyMouseDown = function (e) {
if (false === oThis.m_oApi.bInit_word_control)
return;
if (AscCommon.g_inputContext && AscCommon.g_inputContext.externalChangeFocus())
return;
if (oThis.SplitterType !== 0)
return;
let _isCatch = false;
let downClick = global_mouseEvent.ClickCount;
AscCommon.check_MouseDownEvent(e, true);
global_mouseEvent.ClickCount = downClick;
global_mouseEvent.LockMouse();
let oWordControl = oThis;
let nSplitter = oThis.hitToSplitter();
if (nSplitter > 0) {
oWordControl.m_oBody.HtmlElement.style.cursor = Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom
? "ns-resize"
: nSplitter === 1 ? "ew-resize" : "ns-resize";
oWordControl.createSplitterElement(nSplitter);
_isCatch = true;
} else {
oWordControl.m_oBody.HtmlElement.style.cursor = "default";
}
if (_isCatch) {
if (oWordControl.m_oMainParent && oWordControl.m_oMainParent.HtmlElement)
oWordControl.m_oMainParent.HtmlElement.style.pointerEvents = "none";
if (oWordControl.m_oThumbnailsContainer && oWordControl.m_oThumbnailsContainer.HtmlElement)
oWordControl.m_oThumbnailsContainer.HtmlElement.style.pointerEvents = "none";
AscCommon.stopEvent(e);
}
};
CEditorPage.prototype.onBodyMouseMove = function (e) {
if (false === oThis.m_oApi.bInit_word_control)
return;
let _isCatch = false;
AscCommon.check_MouseMoveEvent(e, true);
const oWordControl = oThis;
if (null == oWordControl.SplitterDiv) {
const cursorStyles = {
0: 'default',
1: Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom ? 'ns-resize' : 'ew-resize',
2: 'ns-resize',
3: 'ns-resize',
};
const nSplitter = oThis.hitToSplitter();
oWordControl.m_oBody.HtmlElement.style.cursor = cursorStyles[nSplitter] || 'default';
} else {
const mouseX = global_mouseEvent.X - oWordControl.X;
const mouseY = global_mouseEvent.Y - oWordControl.Y;
if (1 == oWordControl.SplitterType) {
const canHideThumbnails = !oWordControl.m_oApi.isReporterMode;
const splitter = oWordControl.splitters[0];
let minPosition, maxPosition;
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.left) {
minPosition = splitter.minPosition * g_dKoef_mm_to_pix >> 0;
maxPosition = splitter.maxPosition * g_dKoef_mm_to_pix >> 0;
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.right) {
minPosition = oWordControl.Width - (splitter.maxPosition * g_dKoef_mm_to_pix >> 0);
maxPosition = oWordControl.Width - (splitter.minPosition * g_dKoef_mm_to_pix >> 0);
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom) {
minPosition = oWordControl.Height - (splitter.maxPosition * g_dKoef_mm_to_pix >> 0);
maxPosition = oWordControl.Height - (splitter.minPosition * g_dKoef_mm_to_pix >> 0);
}
let splitterPosition;
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.left) {
const shouldHideThumbnails = canHideThumbnails && mouseX < (minPosition / 2);
splitterPosition = shouldHideThumbnails
? 0
: Math.min(Math.max(mouseX, minPosition), maxPosition);
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.right) {
const shouldHideThumbnails = canHideThumbnails && mouseX > (oWordControl.Width + maxPosition) / 2;
splitterPosition = shouldHideThumbnails
? oWordControl.Width
: Math.min(Math.max(mouseX, minPosition), maxPosition);
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom) {
splitterPosition = Math.max(mouseY, minPosition);
if (splitterPosition > maxPosition) {
const center = (oWordControl.Height + maxPosition) / 2;
splitterPosition = splitterPosition > center ? oWordControl.Height : maxPosition;
}
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom) {
oWordControl.m_oBody.HtmlElement.style.cursor = 'ns-resize';
oWordControl.SplitterDiv.style.top = splitterPosition + 'px';
} else {
oWordControl.m_oBody.HtmlElement.style.cursor = 'ew-resize';
oWordControl.SplitterDiv.style.left = splitterPosition + 'px';
}
}
if (2 == oWordControl.SplitterType || 3 == oWordControl.SplitterType) {
const splitter = oWordControl.splitters[1];
const reservedWordControlHeight = 30 * g_dKoef_mm_to_pix;
const bottom = Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom
? oWordControl.Height - oWordControl.splitters[0].position * g_dKoef_mm_to_pix
: oWordControl.Height;
const minPosition = Math.max(reservedWordControlHeight, bottom - (splitter.maxPosition * g_dKoef_mm_to_pix >> 0));
const maxPosition = bottom - (splitter.minPosition * g_dKoef_mm_to_pix >> 0);
let splitterPosition = Math.max(mouseY, minPosition);
if (splitterPosition > maxPosition) {
const center = (bottom - maxPosition) / 2;
splitterPosition = splitterPosition > center ? bottom : maxPosition;
}
oWordControl.m_oBody.HtmlElement.style.cursor = "ns-resize";
oWordControl.SplitterDiv.style.top = splitterPosition - (GlobalSkin.SplitterWidthMM * g_dKoef_mm_to_pix >> 0) + "px";
}
_isCatch = true;
}
if (_isCatch)
AscCommon.stopEvent(e);
};
CEditorPage.prototype.onBodyMouseUp = function (e) {
if (!oThis.m_oApi.bInit_word_control)
return;
AscCommon.check_MouseUpEvent(e, true);
const oWordControl = oThis;
oWordControl.UnlockCursorTypeOnMouseUp();
if (oWordControl.m_oMainParent && oWordControl.m_oMainParent.HtmlElement)
oWordControl.m_oMainParent.HtmlElement.style.pointerEvents = "";
if (oWordControl.m_oThumbnailsContainer && oWordControl.m_oThumbnailsContainer.HtmlElement)
oWordControl.m_oThumbnailsContainer.HtmlElement.style.pointerEvents = "";
if (!oWordControl.SplitterDiv)
return;
switch (oWordControl.SplitterType) {
case 1: oWordControl.handleThumbnailsSplitter(); break;
case 2: oWordControl.handleNotesSplitter(); break;
case 3: oWordControl.handleAnimPaneSplitter(); break;
}
oWordControl.m_oBody.HtmlElement.removeChild(oWordControl.SplitterDiv);
oWordControl.SplitterDiv = null;
oWordControl.SplitterType = 0;
AscCommon.stopEvent(e);
};
CEditorPage.prototype.handleThumbnailsSplitter = function () {
const splitterLeft = parseInt(this.SplitterDiv.style.left);
const splitterTop = parseInt(this.SplitterDiv.style.top);
const significantDelta = 1; // in millimeters
let position;
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.left) {
position = splitterLeft * g_dKoef_pix_to_mm;
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.right) {
position = Math.max(0, (this.Width - splitterLeft) * g_dKoef_pix_to_mm - GlobalSkin.SplitterWidthMM);
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom) {
position = Math.max(0, (this.Height - splitterTop) * g_dKoef_pix_to_mm - GlobalSkin.SplitterWidthMM);
}
if (Math.abs(this.splitters[0].position - position) <= significantDelta)
return;
this.splitters[0].initialPosition = position;
this.splitters[0].setPosition(position);
this.onSplitterResize();
this.m_oApi.syncOnThumbnailsShow();
};
CEditorPage.prototype.handleNotesSplitter = function () {
const splitterTop = parseInt(this.SplitterDiv.style.top);
const bottom = Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom
? this.Height - this.splitters[0].position * g_dKoef_mm_to_pix
: this.Height;
const significantDelta = 1; // in millimeters
const position = (bottom - splitterTop) * g_dKoef_pix_to_mm - GlobalSkin.SplitterWidthMM;
if (Math.abs(this.splitters[1].position - position) <= significantDelta)
return;
const notesSplitterPosition = Math.max(this.splitters[2].position + HIDDEN_PANE_HEIGHT, position);
this.splitters[1].setPosition(notesSplitterPosition);
this.onSplitterResize();
this.m_oApi.syncOnNotesShow();
if (this.m_oLogicDocument)
this.m_oLogicDocument.CheckNotesShow();
};
CEditorPage.prototype.handleAnimPaneSplitter = function () {
const splitterTop = parseInt(this.SplitterDiv.style.top);
const bottom = Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom
? this.Height - this.splitters[0].position * g_dKoef_mm_to_pix
: this.Height;
const significantDelta = 1; // in millimeters
const position = (bottom - splitterTop) * g_dKoef_pix_to_mm - GlobalSkin.SplitterWidthMM;
if (Math.abs(this.splitters[2].position - position) <= significantDelta)
return;
const diff = this.splitters[1].position - this.splitters[2].position;
this.splitters[2].setPosition(position);
this.splitters[1].setPosition(
Math.max(this.splitters[1].position, this.splitters[2].position + diff)
);
this.onSplitterResize();
this.m_oApi.syncOnNotesShow();
if (this.m_oLogicDocument)
this.m_oLogicDocument.CheckNotesShow();
};
CEditorPage.prototype.UpdateBottomControlsParams = function () {
this.m_oBottomPanesContainer.Bounds.AbsH = this.splitters[1].position;
this.m_oNotesContainer.Bounds.AbsH = this.GetNotesHeight();
if (!this.IsNotesShown()) {
this.m_oNotes.HtmlElement.style.display = "none";
this.m_oNotes_scroll.HtmlElement.style.display = "none";
}
else {
this.m_oNotes.HtmlElement.style.display = "block";
this.m_oNotes_scroll.HtmlElement.style.display = "block";
}
this.m_oAnimationPaneContainer.Bounds.AbsH = this.GetAnimPaneHeight();
if (!this.IsAnimPaneShown()) {
this.m_oAnimationPaneContainer.HtmlElement.style.display = "none";
}
else {
this.m_oAnimationPaneContainer.HtmlElement.style.display = "block";
}
};
CEditorPage.prototype.onSplitterResize = function (isNoNeedResize) {
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.left) {
this.m_oThumbnailsContainer.Bounds.AbsW = this.splitters[0].position;
this.m_oThumbnailsContainer.Bounds.R = this.splitters[0].position;
this.m_oThumbnailsSplit.Bounds.L = this.splitters[0].position;
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.right) {
this.m_oThumbnailsContainer.Bounds.AbsW = this.splitters[0].position;
this.m_oThumbnailsSplit.Bounds.R = this.splitters[0].position;
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom) {
this.m_oThumbnailsContainer.Bounds.AbsH = this.splitters[0].position;
this.m_oThumbnailsSplit.Bounds.B = this.splitters[0].position;
}
if (this.IsSupportAnimPane) {
if (this.splitters[2].position < HIDDEN_PANE_HEIGHT) {
this.splitters[2].setPosition(0, false, true);
Asc.editor.sendEvent('asc_onCloseAnimPane');
}
this.splitters[2].setPosition(
Math.min(this.splitters[2].position, this.splitters[2].maxPosition),
false, true
);
} else {
this.splitters[2].setPosition(0);
}
const notesSplitterPosition = this.IsNotesSupported()
? Math.min(Math.max(this.splitters[1].position, this.splitters[2].position + HIDDEN_PANE_HEIGHT), this.splitters[1].maxPosition)
: 0;
this.splitters[1].setPosition(notesSplitterPosition, false, true);
if (this.IsUseNullThumbnailsSplitter || (0 != this.splitters[0].position)) {
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.left) {
this.m_oMainParent.Bounds.L = this.splitters[0].position + GlobalSkin.SplitterWidthMM;
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.right) {
this.m_oMainParent.Bounds.R = this.splitters[0].position + GlobalSkin.SplitterWidthMM;
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom) {
this.m_oMainParent.Bounds.B = this.splitters[0].position + GlobalSkin.SplitterWidthMM;
}
this.m_oMainContent.Bounds.B = GlobalSkin.SupportNotes ? this.splitters[1].position + GlobalSkin.SplitterWidthMM : 1000;
this.m_oMainContent.Bounds.isAbsB = GlobalSkin.SupportNotes;
this.UpdateBottomControlsParams();
this.m_oThumbnailsContainer.HtmlElement.style.display = "block";
this.m_oThumbnailsSplit.HtmlElement.style.display = "block";
this.m_oMainParent.HtmlElement.style.borderLeft = ("1px solid " + GlobalSkin.BorderSplitterColor);
} else {
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.left) {
this.m_oMainParent.Bounds.L = 0;
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.right) {
this.m_oMainParent.Bounds.R = 0;
}
if (Asc.editor.getThumbnailsPosition() === thumbnailsPositionMap.bottom) {
this.m_oMainParent.Bounds.B = 0;
}
this.m_oMainContent.Bounds.B = GlobalSkin.SupportNotes ? this.splitters[1].position + GlobalSkin.SplitterWidthMM : 1000;
this.m_oMainContent.Bounds.isAbsB = GlobalSkin.SupportNotes;
this.UpdateBottomControlsParams();
this.m_oThumbnailsContainer.HtmlElement.style.display = "none";
this.m_oThumbnailsSplit.HtmlElement.style.display = "none";
this.m_oMainParent.HtmlElement.style.borderLeft = "none";
}
if (this.IsNotesSupported()) {
if (this.m_oNotesContainer.Bounds.AbsH < 1)
this.m_oNotesContainer.Bounds.AbsH = 1;
}
if (this.splitters[1].position <= 1) {
this.m_oNotes.HtmlElement.style.display = "none";
this.m_oNotes_scroll.HtmlElement.style.display = "none";
} else {
this.m_oNotes.HtmlElement.style.display = "block";
this.m_oNotes_scroll.HtmlElement.style.display = "block";
}
if (this.IsAnimPaneShown()) {
this.m_oAnimationPaneContainer.HtmlElement.style.display = "block";
} else {
this.m_oAnimationPaneContainer.HtmlElement.style.display = "none";
}
if (true !== isNoNeedResize)
this.OnResize2(true);
};
// Events
CEditorPage.prototype.initEvents = function () {
this.arrayEventHandlers[0] = new AscCommon.button_eventHandlers("", "0px 0px", "0px -16px", "0px -32px", this.m_oPanelRight_buttonRulers, this.onButtonRulersClick);
this.arrayEventHandlers[1] = new AscCommon.button_eventHandlers("", "0px 0px", "0px -16px", "0px -32px", this.m_oPanelRight_buttonPrevPage, this.onPrevPage);
this.arrayEventHandlers[2] = new AscCommon.button_eventHandlers("", "0px -48px", "0px -64px", "0px -80px", this.m_oPanelRight_buttonNextPage, this.onNextPage);
this.m_oLeftRuler_buttonsTabs.HtmlElement.onclick = this.onButtonTabsClick;
AscCommon.addMouseEvent(this.m_oEditor.HtmlElement, "down", this.onMouseDown);
AscCommon.addMouseEvent(this.m_oEditor.HtmlElement, "move", this.onMouseMove);
AscCommon.addMouseEvent(this.m_oEditor.HtmlElement, "up", this.onMouseUp);
AscCommon.addMouseEvent(this.m_oOverlay.HtmlElement, "down", this.onMouseDown);
AscCommon.addMouseEvent(this.m_oOverlay.HtmlElement, "move", this.onMouseMove);
AscCommon.addMouseEvent(this.m_oOverlay.HtmlElement, "up", this.onMouseUp);
document.getElementById('id_target_cursor').style.pointerEvents = "none";
this.m_oMainContent.HtmlElement.onmousewheel = this.onMouseWhell;
if (this.m_oMainContent.HtmlElement.addEventListener)
this.m_oMainContent.HtmlElement.addEventListener("DOMMouseScroll", this.onMouseWhell, false);
this.m_oBody.HtmlElement.onmousewheel = function (e) {
e.preventDefault();
return false;
};
AscCommon.addMouseEvent(this.m_oTopRuler_horRuler.HtmlElement, "down", this.horRulerMouseDown);
AscCommon.addMouseEvent(this.m_oTopRuler_horRuler.HtmlElement, "move", this.horRulerMouseMove);
AscCommon.addMouseEvent(this.m_oTopRuler_horRuler.HtmlElement, "up", this.horRulerMouseUp);
AscCommon.addMouseEvent(this.m_oLeftRuler_vertRuler.HtmlElement, "down", this.verRulerMouseDown);
AscCommon.addMouseEvent(this.m_oLeftRuler_vertRuler.HtmlElement, "move", this.verRulerMouseMove);
AscCommon.addMouseEvent(this.m_oLeftRuler_vertRuler.HtmlElement, "up", this.verRulerMouseUp);
if (!this.m_oApi.isMobileVersion) {
AscCommon.addMouseEvent(this.m_oMainParent.HtmlElement, "down", this.onBodyMouseDown);
AscCommon.addMouseEvent(this.m_oMainParent.HtmlElement, "move", this.onBodyMouseMove);
AscCommon.addMouseEvent(this.m_oMainParent.HtmlElement, "up", this.onBodyMouseUp);
AscCommon.addMouseEvent(this.m_oBody.HtmlElement, "down", this.onBodyMouseDown);
AscCommon.addMouseEvent(this.m_oBody.HtmlElement, "move", this.onBodyMouseMove);
AscCommon.addMouseEvent(this.m_oBody.HtmlElement, "up", this.onBodyMouseUp);
}
// в мобильной версии - при транзишне - не обновляется позиция/размер
if (this.m_oApi.isMobileVersion) {
var _t = this;
document.addEventListener && document.addEventListener("transitionend", function () { _t.OnResize(false); }, false);
document.addEventListener && document.addEventListener("transitioncancel", function () { _t.OnResize(false); }, false);
}
this.Thumbnails.initEvents();
};
CEditorPage.prototype.initEventsMobile = function () {
if (this.m_oApi.isUseOldMobileVersion()) {
this.MobileTouchManager = new AscCommon.CMobileTouchManager({ eventsElement: "slides_mobile_element" });
this.MobileTouchManager.Init(this.m_oApi);
this.MobileTouchManagerThumbnails = new AscCommon.CMobileTouchManagerThumbnails({ eventsElement: "slides_mobile_element" });
this.MobileTouchManagerThumbnails.Init(this.m_oApi);
this.m_oThumbnailsContainer.HtmlElement.style.zIndex = "11";
this.TextBoxBackground = CreateControl(AscCommon.g_inputContext.HtmlArea.id);
this.TextBoxBackground.HtmlElement.parentNode.parentNode.style.zIndex = 10;
this.MobileTouchManager.initEvents(AscCommon.g_inputContext.HtmlArea.id);
this.MobileTouchManagerThumbnails.initEvents(this.m_oThumbnails.HtmlElement.id);
if (AscCommon.AscBrowser.isAndroid) {
this.TextBoxBackground.HtmlElement["oncontextmenu"] = function (e) {
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
return false;
};
this.TextBoxBackground.HtmlElement["onselectstart"] = function (e) {
oThis.m_oLogicDocument.SelectAll();
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
return false;
};
}
}
else {
this.MobileTouchManager = new AscCommon.CMobileTouchManager({ eventsElement: "slides_mobile_element", desktopMode: true });
this.MobileTouchManager.Init(this.m_oApi);
this.MobileTouchManager.addClickElement([this.m_oEditor.HtmlElement, this.m_oOverlay.HtmlElement]);
this.MobileTouchManagerThumbnails = new AscCommon.CMobileTouchManagerThumbnails({ eventsElement: "slides_mobile_element", desktopMode: true });
this.MobileTouchManagerThumbnails.Init(this.m_oApi);
}
};
// Buttons
CEditorPage.prototype.onButtonTabsClick = function () {
var oWordControl = oThis;
if (oWordControl.m_nTabsType == tab_Left) {
oWordControl.m_nTabsType = tab_Center;
oWordControl.onButtonTabsDraw();
}
else if (oWordControl.m_nTabsType == tab_Center) {
oWordControl.m_nTabsType = tab_Right;
oWordControl.onButtonTabsDraw();
}
else {
oWordControl.m_nTabsType = tab_Left;
oWordControl
.onButtonTabsDraw();
}
};
CEditorPage.prototype.onButtonTabsDraw = function () {
var _ctx = this.m_oLeftRuler_buttonsTabs.HtmlElement.getContext('2d');
_ctx.setTransform(1, 0, 0, 1, 0, 0);
var dPR = AscCommon.AscBrowser.retinaPixelRatio;
var _width = Math.round(19 * dPR);
var _height = Math.round(19 * dPR);
_ctx.clearRect(0, 0, _width, _height);
_ctx.lineWidth = Math.round(dPR);
_ctx.strokeStyle = GlobalSkin.RulerOutline;
var rectSize = Math.round(14 * dPR);
var lineWidth = _ctx.lineWidth;
_ctx.strokeRect(2.5 * lineWidth, 3.5 * lineWidth, Math.round(14 * dPR), Math.round(14 * dPR));
_ctx.beginPath();
_ctx.strokeStyle = GlobalSkin.RulerTabsColor;
_ctx.lineWidth = (dPR - Math.floor(dPR) === 0.5) ? 2 * Math.round(dPR) - 1 : 2 * Math.round(dPR);
var tab_width = Math.round(5 * dPR);
var offset = _ctx.lineWidth % 2 === 1 ? 0.5 : 0;
var dx = Math.round((rectSize - 2 * Math.round(dPR) - tab_width) / 7 * 4);
var dy = Math.round((rectSize - 2 * Math.round(dPR) - tab_width) / 7 * 4);
var x = 4 * Math.round(dPR) + dx;
var y = 4 * Math.round(dPR) + dy;
if (this.m_nTabsType == tab_Left) {
_ctx.moveTo(x + offset, y);
_ctx.lineTo(x + offset, y + tab_width + offset);
_ctx.lineTo(x + tab_width, y + tab_width + offset);
}
else if (this.m_nTabsType == tab_Center) {
tab_width = Math.round(8 * dPR);
tab_width = (tab_width % 2 === 1) ? tab_width - 1 : tab_width;
var dx = Math.round((rectSize - Math.round(dPR) - tab_width) / 2);
var x = 3 * Math.round(dPR) + dx;
var vert_tab_width = Math.round(5 * dPR);
_ctx.moveTo(x, y + vert_tab_width + offset);
_ctx.lineTo(x + tab_width, y + vert_tab_width + offset);
_ctx.moveTo(x - offset + tab_width / 2, y);
_ctx.lineTo(x - offset + tab_width / 2, y + vert_tab_width);
}
else {
var x = 3 * Math.round(dPR) + dx;
_ctx.moveTo(x, tab_width + y + offset);
_ctx.lineTo(x + tab_width + offset, tab_width + y + offset);
_ctx.lineTo(x + tab_width + offset, y);
}
_ctx.stroke();
_ctx.beginPath();
};
CEditorPage.prototype.onPrevPage = function () {
if (false === oThis.m_oApi.bInit_word_control)
return;
let oWordControl = oThis;
let nCurrentSlide = oWordControl.m_oDrawingDocument.SlideCurrent;
if (oWordControl.DemonstrationManager.Mode) {
nCurrentSlide = oWordControl.DemonstrationManager.SlideNum;
}
if (0 < nCurrentSlide) {
oWordControl.GoToPage(nCurrentSlide - 1);
}
else {
oWordControl.GoToPage(0);
}
};
CEditorPage.prototype.onNextPage = function () {
if (false === oThis.m_oApi.bInit_word_control)
return;
let oWordControl = oThis;
let nCurrentSlide = oWordControl.m_oDrawingDocument.SlideCurrent;
let SlidesCount = this.GetSlidesCount();
if (oWordControl.DemonstrationManager.Mode) {
nCurrentSlide = oWordControl.DemonstrationManager.SlideNum;
SlidesCount = oWordControl.m_oLogicDocument.Slides.length;
}
if ((SlidesCount - 1) > nCurrentSlide) {
oWordControl.GoToPage(nCurrentSlide + 1);
}
else if (SlidesCount > 0) {
oWordControl.GoToPage(SlidesCount - 1);
}
};
// Rulers
CEditorPage.prototype.onButtonRulersClick = function () {
if (false === oThis.m_oApi.bInit_word_control || true === oThis.m_oApi.isViewMode)
return;
oThis.m_bIsRuler = !oThis.m_bIsRuler;
oThis.checkNeedRules();
oThis.OnResize(true);
};
CEditorPage.prototype.HideRulers = function () {
if (false === oThis.m_oApi.bInit_word_control)
return;
if (oThis.m_bIsRuler === false)
return;
oThis.m_bIsRuler = !oThis.m_bIsRuler;
oThis.checkNeedRules();
oThis.OnResize(true);
};
CEditorPage.prototype.DisableRulerMarkers = function () {
if (!this.IsEnabledRulerMarkers)
return;
this.IsEnabledRulerMarkers = false;
this.m_oHorRuler.RepaintChecker.BlitAttack = true;
this.m_oHorRuler.IsCanMoveAnyMarkers = false;
this.m_oHorRuler.IsDrawAnyMarkers = false;
this.m_oHorRuler.m_dMarginLeft = 0;
this.m_oHorRuler.m_dMarginRight = this.m_oLogicDocument.GetWidthMM();
this.m_oVerRuler.m_dMarginTop = 0;
this.m_oVerRuler.m_dMarginBottom = this.m_oLogicDocument.GetHeightMM();
this.m_oVerRuler.RepaintChecker.BlitAttack = true;
if (this.m_bIsRuler) {
this.UpdateHorRuler();
this.UpdateVerRuler();
}
};
CEditorPage.prototype.EnableRulerMarkers = function () {
if (this.IsEnabledRulerMarkers)
return;
this.IsEnabledRulerMarkers = true;
this.m_oHorRuler.RepaintChecker.BlitAttack = true;
this.m_oHorRuler.IsCanMoveAnyMarkers = true;
this.m_oHorRuler.IsDrawAnyMarkers = true;
if (this.m_bIsRuler) {
this.UpdateHorRuler();
this.UpdateVerRuler();
}
};
CEditorPage.prototype.horRulerMouseDown = function (e) {
if (false === oThis.m_oApi.bInit_word_control)
return;
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
var oWordControl = oThis;
if (-1 != oWordControl.m_oDrawingDocument.SlideCurrent)
oWordControl.m_oHorRuler.OnMouseDown(oWordControl.m_oDrawingDocument.SlideCurrectRect.left, 0, e);
};
CEditorPage.prototype.horRulerMouseUp = function (e) {
if (false === oThis.m_oApi.bInit_word_control)
return;
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
var oWordControl = oThis;
if (-1 != oWordControl.m_oDrawingDocument.SlideCurrent)
oWordControl.m_oHorRuler.OnMouseUp(oWordControl.m_oDrawingDocument.SlideCurrectRect.left, 0, e);
};
CEditorPage.prototype.horRulerMouseMove = function (e) {
if (false === oThis.m_oApi.bInit_word_control)
return;
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
var oWordControl = oThis;
if (-1 != oWordControl.m_oDrawingDocument.SlideCurrent)
oWordControl.m_oHorRuler.OnMouseMove(oWordControl.m_oDrawingDocument.SlideCurrectRect.left, 0, e);
};
CEditorPage.prototype.verRulerMouseDown = function (e) {
if (false === oThis.m_oApi.bInit_word_control)
return;
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
var oWordControl = oThis;
if (-1 != oWordControl.m_oDrawingDocument.SlideCurrent)
oWordControl.m_oVerRuler.OnMouseDown(0, oWordControl.m_oDrawingDocument.SlideCurrectRect.top, e);
};
CEditorPage.prototype.verRulerMouseUp = function (e) {
if (false === oThis.m_oApi.bInit_word_control)
return;
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
var oWordControl = oThis;
if (-1 != oWordControl.m_oDrawingDocument.SlideCurrent)
oWordControl.m_oVerRuler.OnMouseUp(0, oWordControl.m_oDrawingDocument.SlideCurrectRect.top, e);
};
CEditorPage.prototype.verRulerMouseMove = function (e) {
if (false === oThis.m_oApi.bInit_word_control)
return;
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
var oWordControl = oThis;
if (-1 != oWordControl.m_oDrawingDocument.SlideCurrent)
oWordControl.m_oVerRuler.OnMouseMove(0, oWordControl.m_oDrawingDocument.SlideCurrectRect.top, e);
};
CEditorPage.prototype.UpdateHorRuler = function (isattack) {
if (!this.m_bIsRuler)
return;
if (!isattack && this.m_oDrawingDocument.SlideCurrent == -1)
return;
var drawRect = this.m_oDrawingDocument.SlideCurrectRect;
var _left = drawRect.left;
this.m_oHorRuler.BlitToMain(_left, 0, this.m_oTopRuler_horRuler.HtmlElement);
};
CEditorPage.prototype.UpdateVerRuler = function (isattack) {
if (!this.m_bIsRuler)
return;
if (!isattack && this.m_oDrawingDocument.SlideCurrent == -1)
return;
var drawRect = this.m_oDrawingDocument.SlideCurrectRect;
var _top = drawRect.top;
this.m_oVerRuler.BlitToMain(0, _top, this.m_oLeftRuler_vertRuler.HtmlElement);
};
CEditorPage.prototype.UpdateHorRulerBack = function (isattack) {
var drDoc = this.m_oDrawingDocument;
if (0 <= drDoc.SlideCurrent && drDoc.SlideCurrent < drDoc.GetSlidesCount()) {
this.CreateBackgroundHorRuler(undefined, isattack);
}
this.UpdateHorRuler(isattack);
};
CEditorPage.prototype.UpdateVerRulerBack = function (isattack) {
var drDoc = this.m_oDrawingDocument;
if (0 <= drDoc.SlideCurrent && drDoc.SlideCurrent < drDoc.GetSlidesCount()) {
this.CreateBackgroundVerRuler(undefined, isattack);
}
this.UpdateVerRuler(isattack);
};
CEditorPage.prototype.CreateBackgroundHorRuler = function (margins, isattack) {
var cachedPage = {};
cachedPage.width_mm = this.m_oLogicDocument.GetWidthMM();
cachedPage.height_mm = this.m_oLogicDocument.GetHeightMM();
if (margins !== undefined) {
cachedPage.margin_left = margins.L;
cachedPage.margin_top = margins.T;
cachedPage.margin_right = margins.R;
cachedPage.margin_bottom = margins.B;
}
else {
cachedPage.margin_left = 0;
cachedPage.margin_top = 0;
cachedPage.margin_right = this.m_oLogicDocument.GetWidthMM();
cachedPage.margin_bottom = this.m_oLogicDocument.GetHeightMM();
}
this.m_oHorRuler.CreateBackground(cachedPage, isattack);
};
CEditorPage.prototype.CreateBackgroundVerRuler = function (margins, isattack) {
var cachedPage = {};
cachedPage.width_mm = this.m_oLogicDocument.GetWidthMM();
cachedPage.height_mm = this.m_oLogicDocument.GetHeightMM();
if (margins !== undefined) {
cachedPage.margin_left = margins.L;
cachedPage.margin_top = margins.T;
cachedPage.margin_right = margins.R;
cachedPage.margin_bottom = margins.B;
}
else {
cachedPage.margin_left = 0;
cachedPage.margin_top = 0;
cachedPage.margin_right = this.m_oLogicDocument.GetWidthMM();
cachedPage.margin_bottom = this.m_oLogicDocument.GetHeightMM();
}
this.m_oVerRuler.CreateBackground(cachedPage, isattack);
};
CEditorPage.prototype.checkNeedRules = function () {
if (this.m_bIsRuler) {
this.m_oLeftRuler.HtmlElement.style.display = 'block';
this.m_oTopRuler.HtmlElement.style.display = 'block';
this.m_oMainView.Bounds.L = 5;
this.m_oMainView.Bounds.T = 7;
}
else {
this.m_oLeftRuler.HtmlElement.style.display = 'none';
this.m_oTopRuler.HtmlElement.style.display = 'none';
this.m_oMainView.Bounds.L = 0;
this.m_oMainView.Bounds.T = 0;
}
};
CEditorPage.prototype.FullRulersUpdate = function () {
this.m_oHorRuler.RepaintChecker.BlitAttack = true;
this.m_oVerRuler.RepaintChecker.BlitAttack = true;
this.m_bIsUpdateHorRuler = true;
this.m_bIsUpdateVerRuler = true;
if (this.m_bIsRuler) {
this.UpdateHorRulerBack(true);
this.UpdateVerRulerBack(true);
}
};
// Zoom
CEditorPage.prototype.zoom_FitToWidth_value = function () {
var _value = 100;
if (!this.m_oLogicDocument)
return _value;
var w = this.m_oEditor.HtmlElement.width;
w /= AscCommon.AscBrowser.retinaPixelRatio;
var Zoom = 100;
var _pageWidth = this.m_oLogicDocument.GetWidthMM() * g_dKoef_mm_to_pix;
if (0 != _pageWidth) {
Zoom = 100 * (w - 2 * this.SlideDrawer.CONST_BORDER) / _pageWidth;
if (Zoom < 5)
Zoom = 5;
}
_value = Zoom >> 0;
return _value;
};
CEditorPage.prototype.zoom_FitToPage_value = function (_canvas_height) {
var _value = 100;
if (!this.m_oLogicDocument)
return _value;
var w = this.m_oEditor.HtmlElement.width;
var h = (undefined == _canvas_height) ? this.m_oEditor.HtmlElement.height : _canvas_height;
w /= AscCommon.AscBrowser.retinaPixelRatio;
h /= AscCommon.AscBrowser.retinaPixelRatio;
var _pageWidth = this.m_oLogicDocument.GetWidthMM() * g_dKoef_mm_to_pix;
var _pageHeight = this.m_oLogicDocument.GetHeightMM() * g_dKoef_mm_to_pix;
var _hor_Zoom = 100;
if (0 != _pageWidth)
_hor_Zoom = (100 * (w - 2 * this.SlideDrawer.CONST_BORDER)) / _pageWidth;
var _ver_Zoom = 100;
if (0 != _pageHeight)
_ver_Zoom = (100 * (h - 2 * this.SlideDrawer.CONST_BORDER)) / _pageHeight;
_value = (Math.min(_hor_Zoom, _ver_Zoom) - 0.5) >> 0;
if (_value < 5)
_value = 5;
return _value;
};
CEditorPage.prototype.zoom_FitToWidth = function () {
this.m_nZoomType = 1;
if (!this.m_oLogicDocument)
return;
var _new_value = this.zoom_FitToWidth_value();
if (_new_value != this.m_nZoomValue) {
this.m_nZoomValue = _new_value;
this.zoom_Fire(1);
return true;
}
else {
this.m_oApi.sync_zoomChangeCallback(this.m_nZoomValue, 1);
}
return false;
};
CEditorPage.prototype.zoom_FitToPage = function () {
this.m_nZoomType = 2;
if (!this.m_oLogicDocument)
return;
var _new_value = this.zoom_FitToPage_value();
if (_new_value != this.m_nZoomValue) {
this.m_nZoomValue = _new_value;
this.zoom_Fire(2);
return true;
}
else {
this.m_oApi.sync_zoomChangeCallback(this.m_nZoomValue, 2);
}
return false;
};
CEditorPage.prototype.zoom_Fire = function (type) {
if (false === oThis.m_oApi.bInit_word_control)
return;
this.m_nZoomType = type;
// нужно проверить режим и сбросить кеш грамотно (ie version)
AscCommon.g_fontManager.ClearRasterMemory();
var oWordControl = oThis;
oWordControl.m_bIsRePaintOnScroll = false;
var dPosition = 0;
if (oWordControl.m_dScrollY_max != 0) {
dPosition = oWordControl.m_dScrollY / oWordControl.m_dScrollY_max;
}
oWordControl.CheckZoom();
oWordControl.CalculateDocumentSize();
var lCurPage = oWordControl.m_oDrawingDocument.SlideCurrent;
this.GoToPage(lCurPage, true);
this.ZoomFreePageNum = lCurPage;
if (-1 != lCurPage) {
this.CreateBackgroundHorRuler();
oWordControl.m_bIsUpdateHorRuler = true;
this.CreateBackgroundVerRuler();
oWordControl.m_bIsUpdateVerRuler = true;
}
var lPosition = parseInt(dPosition * oWordControl.m_oScrollVerApi.getMaxScrolledY());
oWordControl.m_oScrollVerApi.scrollToY(lPosition);
this.ZoomFreePageNum = -1;
oWordControl.m_oApi.sync_zoomChangeCallback(this.m_nZoomValue, type);
oWordControl.m_bIsUpdateTargetNoAttack = true;
oWordControl.m_bIsRePaintOnScroll = true;
oWordControl.OnScroll();
if (this.MobileTouchManager)
this.MobileTouchManager.Resize_After();
if (this.IsNotesSupported() && this.m_oNotesApi)
this.m_oNotesApi.OnResize();
if (this.m_oAnimPaneApi)
this.m_oAnimPaneApi.OnResize();
};
CEditorPage.prototype.zoom_Out = function () {
if (false === oThis.m_oApi.bInit_word_control)
return;
var _zooms = oThis.zoom_values;
var _count = _zooms.length;
var _Zoom = _zooms[0];
for (var i = (_count - 1); i >= 0; i--) {
if (this.m_nZoomValue > _zooms[i]) {
_Zoom = _zooms[i];
break;
}
}
if (oThis.m_nZoomValue <= _Zoom)
return;
oThis.m_nZoomValue = _Zoom;
oThis.zoom_Fire(0);
};
CEditorPage.prototype.zoom_In = function () {
if (false === oThis.m_oApi.bInit_word_control)
return;
var _zooms = oThis.zoom_values;
var _count = _zooms.length;
var _Zoom = _zooms[_count - 1];
for (var i = 0; i < _count; i++) {
if (this.m_nZoomValue < _zooms[i]) {
_Zoom = _zooms[i];
break;
}
}
if (oThis.m_nZoomValue >= _Zoom)
return;
oThis.m_nZoomValue = _Zoom;
oThis.zoom_Fire(0);
};
CEditorPage.prototype.CheckZoom = function () {
if (!this.NoneRepaintPages)
this.m_oDrawingDocument.ClearCachePages();
};
// Overlay
CEditorPage.prototype.ShowOverlay = function () {
this.m_oOverlayApi.Show();
};
CEditorPage.prototype.UnShowOverlay = function () {
this.m_oOverlayApi.UnShow();
};
CEditorPage.prototype.CheckUnShowOverlay = function () {
var drDoc = this.m_oDrawingDocument;
/*
if (!drDoc.m_bIsSearching && !drDoc.m_bIsSelection)
{
this.UnShowOverlay();
return false;
}
*/
return true;
};
CEditorPage.prototype.CheckShowOverlay = function () {
var drDoc = this.m_oDrawingDocument;
if (drDoc.m_bIsSearching || drDoc.m_bIsSelection)
this.ShowOverlay();
};
// Paint
CEditorPage.prototype.GetDrawingPageInfo = function (nPageIndex) {
return {
drawingPage: this.m_oDrawingDocument.SlideCurrectRect,
width_mm: this.m_oLogicDocument.GetWidthMM(),
height_mm: this.m_oLogicDocument.GetHeightMM()
};
};
CEditorPage.prototype.OnRePaintAttack = function () {
this.m_bIsFullRepaint = true;
this.OnScroll();
};
CEditorPage.prototype.StartMainTimer = function () {
this.paintMessageLoop.Start(this.onTimerScroll.bind(this));
};
CEditorPage.prototype.onTimerScroll = function (isThUpdateSync) {
var oWordControl = oThis;
if (oWordControl.m_oApi.isLongAction())
return;
var isRepaint = oWordControl.m_bIsScroll;
if (oWordControl.m_bIsScroll) {
oWordControl.m_bIsScroll = false;
oWordControl.OnPaint();
if (isThUpdateSync !== undefined) {
oWordControl.Thumbnails.onCheckUpdate();
}
}
else {
oWordControl.Thumbnails.onCheckUpdate();
}
if (!isRepaint && oWordControl.m_oNotesApi.IsRepaint)
isRepaint = true;
if (oWordControl.IsNotesSupported() && oWordControl.m_oNotesApi && oWordControl.IsNotesShown())
oWordControl.m_oNotesApi.CheckPaint();
if (oWordControl.m_oAnimPaneApi && oWordControl.IsAnimPaneShown())
oWordControl.m_oAnimPaneApi.CheckPaint();
if (null != oWordControl.m_oLogicDocument) {
oWordControl.m_oDrawingDocument.UpdateTargetFromPaint = true;
oWordControl.m_oLogicDocument.CheckTargetUpdate();
oWordControl.m_oDrawingDocument.CheckTargetShow();
oWordControl.m_oDrawingDocument.UpdateTargetFromPaint = false;
oWordControl.CheckFontCache();
if (oWordControl.m_bIsUpdateTargetNoAttack) {
oWordControl.m_oDrawingDocument.UpdateTargetNoAttack();
oWordControl.m_bIsUpdateTargetNoAttack = false;
}
}
oWordControl.m_oDrawingDocument.Collaborative_TargetsUpdate(isRepaint);
if (oThis.DemonstrationManager.Mode && !oThis.m_oApi.isReporterMode) {
oThis.DemonstrationManager.CheckHideCursor();
}
};
CEditorPage.prototype.onTimerScroll_sync = function (isThUpdateSync) {
var oWordControl = oThis;
var isRepaint = oWordControl.m_bIsScroll;
if (oWordControl.m_bIsScroll) {
oWordControl.m_bIsScroll = false;
oWordControl.OnPaint();
if (isThUpdateSync !== undefined) {
oWordControl.Thumbnails.onCheckUpdate();
}
if (null != oWordControl.m_oLogicDocument && oWordControl.m_oApi.bInit_word_control)
oWordControl.m_oLogicDocument.Viewer_OnChangePosition();
}
else {
oWordControl.Thumbnails.onCheckUpdate();
}
if (null != oWordControl.m_oLogicDocument) {
oWordControl.m_oDrawingDocument.UpdateTargetFromPaint = true;
oWordControl.m_oLogicDocument.CheckTargetUpdate();
oWordControl.m_oDrawingDocument.CheckTargetShow();
oWordControl.m_oDrawingDocument.UpdateTargetFromPaint = false;
oWordControl.CheckFontCache();
}
oWordControl.m_oDrawingDocument.Collaborative_TargetsUpdate(isRepaint);
};
CEditorPage.prototype.OnPaint = function () {
if (false === oThis.m_oApi.bInit_word_control)
return;
var canvas = this.m_oEditor.HtmlElement;
if (null == canvas)
return;
var context = AscCommon.AscBrowser.getContext2D(canvas);
var _width = canvas.width;
var _height = canvas.height;
context.fillStyle = GlobalSkin.BackgroundColor;
context.fillRect(0, 0, _width, _height);
//context.clearRect(0, 0, _width, _height);
/*
if (this.SlideDrawer.IsRecalculateSlide == true)
{
this.SlideDrawer.CheckSlide(this.m_oDrawingDocument.SlideCurrent);
this.SlideDrawer.IsRecalculateSlide = false;
}
*/
this.SlideDrawer.DrawSlide(context, this.m_dScrollX, this.m_dScrollX_max,
this.m_dScrollY - this.SlideScrollMIN, this.m_dScrollY_max, this.m_oDrawingDocument.SlideCurrent);
this.OnUpdateOverlay();
if (this.m_bIsUpdateHorRuler) {
this.UpdateHorRuler();
this.m_bIsUpdateHorRuler = false;
}
if (this.m_bIsUpdateVerRuler) {
this.UpdateVerRuler();
this.m_bIsUpdateVerRuler = false;
}
if (this.m_bIsUpdateTargetNoAttack) {
this.m_oDrawingDocument.UpdateTargetNoAttack();
this.m_bIsUpdateTargetNoAttack = false;
}
this.m_oApi.clearEyedropperImgData();
};
CEditorPage.prototype.OnScroll = function () {
this.OnCalculatePagesPlace();
this.m_bIsScroll = true;
};
// Position
CEditorPage.prototype.CalculateDocumentSizeInternal = function (_canvas_height, _zoom_value, _check_bounds2) {
var size = {
m_dDocumentWidth: 0,
m_dDocumentHeight: 0,
m_dDocumentPageWidth: 0,
m_dDocumentPageHeight: 0,
SlideScrollMIN: 0,
SlideScrollMAX: 0
};
var _zoom = (undefined == _zoom_value) ? this.m_nZoomValue : _zoom_value;
var dKoef = (_zoom * g_dKoef_mm_to_pix / 100);
var _bounds_slide = this.SlideBoundsOnCalculateSize;
if (undefined == _check_bounds2) {
this.SlideBoundsOnCalculateSize.fromBounds(this.SlideDrawer.BoundsChecker.Bounds);
}
else {
_bounds_slide = new AscFormat.CBoundsController();
this.SlideDrawer.CheckSlideSize(_zoom, this.m_oDrawingDocument.SlideCurrent);
_bounds_slide.fromBounds(this.SlideDrawer.BoundsChecker2.Bounds);
}
var _srcW = this.m_oEditor.HtmlElement.width;
var _srcH = (undefined !== _canvas_height) ? _canvas_height : this.m_oEditor.HtmlElement.height;
if (AscCommon.AscBrowser.isCustomScaling()) {
_srcW = (_srcW / AscCommon.AscBrowser.retinaPixelRatio) >> 0;
_srcH = (_srcH / AscCommon.AscBrowser.retinaPixelRatio) >> 0;
_bounds_slide = {
min_x: (_bounds_slide.min_x / AscCommon.AscBrowser.retinaPixelRatio) >> 0,
min_y: (_bounds_slide.min_y / AscCommon.AscBrowser.retinaPixelRatio) >> 0,
max_x: (_bounds_slide.max_x / AscCommon.AscBrowser.retinaPixelRatio) >> 0,
max_y: (_bounds_slide.max_y / AscCommon.AscBrowser.retinaPixelRatio) >> 0
};
}
var _centerX = (_srcW / 2) >> 0;
var _centerSlideX = (dKoef * this.m_oLogicDocument.GetWidthMM() / 2) >> 0;
var _hor_width_left = Math.min(0, _centerX - (_centerSlideX - _bounds_slide.min_x) - this.SlideDrawer.CONST_BORDER);
var _hor_width_right = Math.max(_srcW - 1, _centerX + (_bounds_slide.max_x - _centerSlideX) + this.SlideDrawer.CONST_BORDER);
var _centerY = (_srcH / 2) >> 0;
var _centerSlideY = (dKoef * this.m_oLogicDocument.GetHeightMM() / 2) >> 0;
var _ver_height_top = Math.min(0, _centerY - (_centerSlideY - _bounds_slide.min_y) - this.SlideDrawer.CONST_BORDER);
var _ver_height_bottom = Math.max(_srcH - 1, _centerY + (_bounds_slide.max_y - _centerSlideY) + this.SlideDrawer.CONST_BORDER);
var lWSlide = _hor_width_right - _hor_width_left + 1;
var lHSlide = _ver_height_bottom - _ver_height_top + 1;
var one_slide_width = lWSlide;
var one_slide_height = Math.max(lHSlide, _srcH);
size.m_dDocumentPageWidth = one_slide_width;
size.m_dDocumentPageHeight = one_slide_height;
size.m_dDocumentWidth = one_slide_width;
size.m_dDocumentHeight = (one_slide_height * this.m_oDrawingDocument.GetSlidesCount()) >> 0;
if (0 == this.m_oDrawingDocument.GetSlidesCount())
size.m_dDocumentHeight = one_slide_height >> 0;
size.SlideScrollMIN = this.m_oDrawingDocument.SlideCurrent * one_slide_height;
size.SlideScrollMAX = size.SlideScrollMIN + one_slide_height - _srcH;
if (0 == this.m_oDrawingDocument.GetSlidesCount()) {
size.SlideScrollMIN = 0;
size.SlideScrollMAX = size.SlideScrollMIN + one_slide_height - _srcH;
}
return size;
};
CEditorPage.prototype.CalculateDocumentSize = function (bIsAttack) {
if (false === oThis.m_oApi.bInit_word_control) {
oThis.UpdateScrolls();
return;
}
var size = this.CalculateDocumentSizeInternal();
this.m_dDocumentWidth = size.m_dDocumentWidth;
this.m_dDocumentHeight = size.m_dDocumentHeight;
this.m_dDocumentPageWidth = size.m_dDocumentPageWidth;
this.m_dDocumentPageHeight = size.m_dDocumentPageHeight;
this.SlideScrollMIN = size.SlideScrollMIN;
this.SlideScrollMAX = size.SlideScrollMAX;
// теперь проверим необходимость перезуммирования
if (1 == this.m_nZoomType) {
if (true === this.zoom_FitToWidth())
return;
}
if (2 == this.m_nZoomType) {
if (true === this.zoom_FitToPage())
return;
}
this.MainScrollLock();
this.checkNeedHorScroll();
this.UpdateScrolls();
this.MainScrollUnLock();
this.Thumbnails.SlideWidth = this.m_oLogicDocument.GetWidthMM();
this.Thumbnails.SlideHeight = this.m_oLogicDocument.GetHeightMM();
this.Thumbnails.CheckSizes();
if (this.MobileTouchManager)
this.MobileTouchManager.Resize();
if (this.m_oApi.watermarkDraw) {
this.m_oApi.watermarkDraw.zoom = this.m_nZoomValue / 100;
this.m_oApi.watermarkDraw.Generate();
}
};
CEditorPage.prototype.CheckCalculateDocumentSize = function (_bounds) {
if (false === oThis.m_oApi.bInit_word_control) {
oThis.UpdateScrolls();
return;
}
var size = this.CalculateDocumentSizeInternal();
this.m_dDocumentWidth = size.m_dDocumentWidth;
this.m_dDocumentHeight = size.m_dDocumentHeight;
this.m_dDocumentPageWidth = size.m_dDocumentPageWidth;
this.m_dDocumentPageHeight = size.m_dDocumentPageHeight;
this.SlideScrollMIN = size.SlideScrollMIN;
this.SlideScrollMAX = size.SlideScrollMAX;
this.MainScrollLock();
var bIsResize = this.checkNeedHorScroll();
this.UpdateScrolls();
this.MainScrollUnLock();
return bIsResize;
};
CEditorPage.prototype.OnCalculatePagesPlace = function () {
if (false === oThis.m_oApi.bInit_word_control)
return;
var canvas = this.m_oEditor.HtmlElement;
if (null == canvas)
return;
var dKoef = (this.m_nZoomValue * g_dKoef_mm_to_pix / 100);
var _bounds_slide = this.SlideDrawer.BoundsChecker.Bounds;
var _slideW = (dKoef * this.m_oLogicDocument.GetWidthMM()) >> 0;
var _slideH = (dKoef * this.m_oLogicDocument.GetHeightMM()) >> 0;
var _srcW = this.m_oEditor.HtmlElement.width;
var _srcH = this.m_oEditor.HtmlElement.height;
if (AscCommon.AscBrowser.isCustomScaling()) {
_srcW = (_srcW / AscCommon.AscBrowser.retinaPixelRatio) >> 0;
_srcH = (_srcH / AscCommon.AscBrowser.retinaPixelRatio) >> 0;
_bounds_slide = {
min_x: (_bounds_slide.min_x / AscCommon.AscBrowser.retinaPixelRatio) >> 0,
min_y: (_bounds_slide.min_y / AscCommon.AscBrowser.retinaPixelRatio) >> 0,
max_x: (_bounds_slide.max_x / AscCommon.AscBrowser.retinaPixelRatio) >> 0,
max_y: (_bounds_slide.max_y / AscCommon.AscBrowser.retinaPixelRatio) >> 0
};
}
var _centerX = (_srcW / 2) >> 0;
var _centerSlideX = (dKoef * this.m_oLogicDocument.GetWidthMM() / 2) >> 0;
var _hor_width_left = Math.min(0, _centerX - (_centerSlideX - _bounds_slide.min_x) - this.SlideDrawer.CONST_BORDER);
var _hor_width_right = Math.max(_srcW - 1, _centerX + (_bounds_slide.max_x - _centerSlideX) + this.SlideDrawer.CONST_BORDER);
var _centerY = (_srcH / 2) >> 0;
var _centerSlideY = (dKoef * this.m_oLogicDocument.GetHeightMM() / 2) >> 0;
var _ver_height_top = Math.min(0, _centerY - (_centerSlideY - _bounds_slide.min_y) - this.SlideDrawer.CONST_BORDER);
var _ver_height_bottom = Math.max(_srcH - 1, _centerX + (_bounds_slide.max_y - _centerSlideY) + this.SlideDrawer.CONST_BORDER);
if (this.m_dScrollY <= this.SlideScrollMIN)
this.m_dScrollY = this.SlideScrollMIN;
if (this.m_dScrollY >= this.SlideScrollMAX)
this.m_dScrollY = this.SlideScrollMAX;
var _x = -this.m_dScrollX + _centerX - _centerSlideX - _hor_width_left;
var _y = -(this.m_dScrollY - this.SlideScrollMIN) + _centerY - _centerSlideY - _ver_height_top;
// теперь расчитаем какие нужны позиции, чтобы слайд находился по центру
var _x_c = _centerX - _centerSlideX;
var _y_c = _centerY - _centerSlideY;
this.m_dScrollX_Central = _centerX - _centerSlideX - _hor_width_left - _x_c;
this.m_dScrollY_Central = this.SlideScrollMIN + _centerY - _centerSlideY - _ver_height_top - _y_c;
this.m_oDrawingDocument.SlideCurrectRect.left = _x;
this.m_oDrawingDocument.SlideCurrectRect.top = _y;
this.m_oDrawingDocument.SlideCurrectRect.right = _x + _slideW;
this.m_oDrawingDocument.SlideCurrectRect.bottom = _y + _slideH;
if (this.m_oApi.isMobileVersion || this.m_oApi.isViewMode) {
var lPage = this.m_oApi.GetCurrentVisiblePage();
this.m_oApi.sendEvent("asc_onCurrentVisiblePage", this.m_oApi.GetCurrentVisiblePage());
}
if (this.m_bDocumentPlaceChangedEnabled)
this.m_oApi.sendEvent("asc_onDocumentPlaceChanged");
// update media control position
this.m_oApi.onUpdateMediaPlayer();
AscCommon.g_specialPasteHelper.SpecialPasteButton_Update_Position();
// update position of toggle-chart-elements button
Asc.editor.toggleChartElementsCallback();
};
// Scrolls
CEditorPage.prototype.MainScrollLock = function () {
this.MainScrollsEnabledFlag++;
};
CEditorPage.prototype.MainScrollUnLock = function () {
this.MainScrollsEnabledFlag--;
if (this.MainScrollsEnabledFlag < 0)
this.MainScrollsEnabledFlag = 0;
};
CEditorPage.prototype.GetVerticalScrollTo = function (y) {
var dKoef = g_dKoef_mm_to_pix * this.m_nZoomValue / 100;
return 5 + y * dKoef;
};
CEditorPage.prototype.GetHorizontalScrollTo = function (x) {
var dKoef = g_dKoef_mm_to_pix * this.m_nZoomValue / 100;
return 5 + dKoef * x;
};
CEditorPage.prototype.DeleteVerticalScroll = function () {
this.m_oMainView.Bounds.R = 0;
this.m_oPanelRight.HtmlElement.style.display = "none";
this.OnResize();
};
CEditorPage.prototype.verticalScrollCheckChangeSlide = function () {
if (0 == this.m_nVerticalSlideChangeOnScrollInterval || !this.m_nVerticalSlideChangeOnScrollEnabled) {
this.m_oScrollVer_.disableCurrentScroll = false;
return true;
}
// защита от внутренних скроллах. мы превентим ТОЛЬКО самый верхний из onMouseWheel
this.m_nVerticalSlideChangeOnScrollEnabled = false;
var newTime = new Date().getTime();
if (-1 == this.m_nVerticalSlideChangeOnScrollLast) {
this.m_nVerticalSlideChangeOnScrollLast = newTime;
this.m_oScrollVer_.disableCurrentScroll = false;
return true;
}
var checkTime = this.m_nVerticalSlideChangeOnScrollLast + this.m_nVerticalSlideChangeOnScrollInterval;
if (newTime < this.m_nVerticalSlideChangeOnScrollLast || newTime > checkTime) {
this.m_nVerticalSlideChangeOnScrollLast = newTime;
this.m_oScrollVer_.disableCurrentScroll = false;
return true;
}
this.m_oScrollVer_.disableCurrentScroll = true;
return false;
};
CEditorPage.prototype.verticalScroll = function (sender, scrollPositionY, maxY, isAtTop, isAtBottom) {
if (false === oThis.m_oApi.bInit_word_control)
return;
if (0 != this.MainScrollsEnabledFlag)
return;
if (oThis.m_oApi.isReporterMode)
return;
if (!this.m_oDrawingDocument.IsEmptyPresentation) {
if (this.StartVerticalScroll) {
this.VerticalScrollOnMouseUp.ScrollY = scrollPositionY;
this.VerticalScrollOnMouseUp.ScrollY_max = maxY;
this.VerticalScrollOnMouseUp.SlideNum = (scrollPositionY * this.m_oDrawingDocument.GetSlidesCount() / Math.max(1, maxY)) >> 0;
if (this.VerticalScrollOnMouseUp.SlideNum >= this.m_oDrawingDocument.GetSlidesCount())
this.VerticalScrollOnMouseUp.SlideNum = this.m_oDrawingDocument.GetSlidesCount() - 1;
this.m_oApi.sendEvent("asc_onPaintSlideNum", this.VerticalScrollOnMouseUp.SlideNum);
return;
}
var lNumSlide = ((scrollPositionY / this.m_dDocumentPageHeight) + 0.01) >> 0; // 0.01 - ошибка округления!!
var _can_change_slide = true;
if (-1 != this.ZoomFreePageNum && this.ZoomFreePageNum == this.m_oDrawingDocument.SlideCurrent)
_can_change_slide = false;
if (_can_change_slide) {
if (lNumSlide != this.m_oDrawingDocument.SlideCurrent) {
if (!this.verticalScrollCheckChangeSlide())
return;
if (this.IsGoToPageMAXPosition) {
if (lNumSlide >= this.m_oDrawingDocument.SlideCurrent)
this.IsGoToPageMAXPosition = false;
}
this.GoToPage(lNumSlide, false, true);
return;
}
else if (this.SlideScrollMAX < scrollPositionY) {
if (!this.verticalScrollCheckChangeSlide())
return;
this.IsGoToPageMAXPosition = false;
this.GoToPage(this.m_oDrawingDocument.SlideCurrent + 1, false, true);
return;
}
}
else {
if (!this.verticalScrollCheckChangeSlide())
return;
this.GoToPage(this.ZoomFreePageNum, false, true);
}
}
else {
if (this.StartVerticalScroll)
return;
}
var oWordControl = oThis;
oWordControl.m_dScrollY = Math.max(0, Math.min(scrollPositionY, maxY));
oWordControl.m_dScrollY_max = maxY;
oWordControl.m_bIsUpdateVerRuler = true;
oWordControl.m_bIsUpdateTargetNoAttack = true;
oWordControl.IsGoToPageMAXPosition = false;
if (oWordControl.m_bIsRePaintOnScroll === true)
oWordControl.OnScroll();
};
CEditorPage.prototype.verticalScrollMouseUp = function (sender, e) {
if (0 != this.MainScrollsEnabledFlag || !this.StartVerticalScroll)
return;
if (this.m_oDrawingDocument.IsEmptyPresentation) {
this.StartVerticalScroll = false;
this.m_oScrollVerApi.scrollByY(0, true);
return;
}
if (this.VerticalScrollOnMouseUp.SlideNum != this.m_oDrawingDocument.SlideCurrent)
this.GoToPage(this.VerticalScrollOnMouseUp.SlideNum, false, true);
else {
this.StartVerticalScroll = false;
this.m_oApi.sendEvent("asc_onEndPaintSlideNum");
this.m_oScrollVerApi.scrollByY(0, true);
}
};
CEditorPage.prototype.CorrectSpeedVerticalScroll = function (newScrollPos) {
if (0 != this.MainScrollsEnabledFlag)
return;
this.StartVerticalScroll = true;
var res = { isChange: false, Pos: newScrollPos };
return res;
};
CEditorPage.prototype.CorrectVerticalScrollByYDelta = function (delta) {
if (0 != this.MainScrollsEnabledFlag)
return;
this.IsGoToPageMAXPosition = true;
var res = { isChange: false, Pos: delta };
if (this.m_dScrollY > this.SlideScrollMIN && (this.m_dScrollY + delta) < this.SlideScrollMIN) {
res.Pos = this.SlideScrollMIN - this.m_dScrollY;
res.isChange = true;
}
else if (this.m_dScrollY < this.SlideScrollMAX && (this.m_dScrollY + delta) > this.SlideScrollMAX) {
res.Pos = this.SlideScrollMAX - this.m_dScrollY;
res.isChange = true;
}
return res;
};
CEditorPage.prototype.horizontalScroll = function (sender, scrollPositionX, maxX, isAtLeft, isAtRight) {
if (false === oThis.m_oApi.bInit_word_control)
return;
if (0 != this.MainScrollsEnabledFlag)
return;
var oWordControl = oThis;
oWordControl.m_dScrollX = scrollPositionX;
oWordControl.m_dScrollX_max = maxX;
oWordControl.m_bIsUpdateHorRuler = true;
oWordControl.m_bIsUpdateTargetNoAttack = true;
if (oWordControl.m_bIsRePaintOnScroll === true) {
oWordControl.OnScroll();
}
};
CEditorPage.prototype.CreateScrollSettings = function () {
var settings = new AscCommon.ScrollSettings();
settings.screenW = this.m_oEditor.HtmlElement.width;
settings.screenH = this.m_oEditor.HtmlElement.height;
settings.vscrollStep = 45;
settings.hscrollStep = 45;
settings.contentH = this.m_dDocumentHeight;
settings.contentW = this.m_dDocumentWidth;
settings.scrollBackgroundColor = GlobalSkin.ScrollBackgroundColor;
settings.scrollBackgroundColorHover = GlobalSkin.ScrollBackgroundColor;
settings.scrollBackgroundColorActive = GlobalSkin.ScrollBackgroundColor;
settings.scrollerColor = GlobalSkin.ScrollerColor;
settings.scrollerHoverColor = GlobalSkin.ScrollerHoverColor;
settings.scrollerActiveColor = GlobalSkin.ScrollerActiveColor;
settings.arrowColor = GlobalSkin.ScrollArrowColor;
settings.arrowHoverColor = GlobalSkin.ScrollArrowHoverColor;
settings.arrowActiveColor = GlobalSkin.ScrollArrowActiveColor;
settings.strokeStyleNone = GlobalSkin.ScrollOutlineColor;
settings.strokeStyleOver = GlobalSkin.ScrollOutlineHoverColor;
settings.strokeStyleActive = GlobalSkin.ScrollOutlineActiveColor;
settings.targetColor = GlobalSkin.ScrollerTargetColor;
settings.targetHoverColor = GlobalSkin.ScrollerTargetHoverColor;
settings.targetActiveColor = GlobalSkin.ScrollerTargetActiveColor;
if (this.m_bIsRuler) {
settings.screenAddH = this.m_oTopRuler_horRuler.HtmlElement.height;
}
settings.screenW = AscCommon.AscBrowser.convertToRetinaValue(settings.screenW);
settings.screenH = AscCommon.AscBrowser.convertToRetinaValue(settings.screenH);
settings.screenAddH = AscCommon.AscBrowser.convertToRetinaValue(settings.screenAddH);
return settings;
};
CEditorPage.prototype.UpdateScrolls = function () {
var settings;
if (window["NATIVE_EDITOR_ENJINE"])
return;
settings = this.CreateScrollSettings();
settings.alwaysVisible = true;
settings.isVerticalScroll = false;
settings.isHorizontalScroll = true;
if (this.m_bIsHorScrollVisible) {
if (this.m_oScrollHor_)
this.m_oScrollHor_.Repos(settings, true, undefined);//unbind("scrollhorizontal")
else {
this.m_oScrollHor_ = new AscCommon.ScrollObject("id_horizontal_scroll", settings);
this.m_oScrollHor_.bind("scrollhorizontal", function (evt) {
oThis.horizontalScroll(this, evt.scrollD, evt.maxScrollX);
});
this.m_oScrollHor_.onLockMouse = function (evt) {
AscCommon.check_MouseDownEvent(evt, true);
global_mouseEvent.LockMouse();
};
this.m_oScrollHor_.offLockMouse = function (evt) {
AscCommon.check_MouseUpEvent(evt);
};
this.m_oScrollHorApi = this.m_oScrollHor_;
}
}
settings = this.CreateScrollSettings();
if (this.m_oScrollVer_) {
this.m_oScrollVer_.Repos(settings, undefined, true);//unbind("scrollvertical")
}
else {
this.m_oScrollVer_ = new AscCommon.ScrollObject("id_vertical_scroll", settings);
this.m_oScrollVer_.onLockMouse = function (evt) {
AscCommon.check_MouseDownEvent(evt, true);
global_mouseEvent.LockMouse();
};
this.m_oScrollVer_.offLockMouse = function (evt) {
AscCommon.check_MouseUpEvent(evt);
};
this.m_oScrollVer_.bind("scrollvertical", function (evt) {
oThis.verticalScroll(this, evt.scrollD, evt.maxScrollY);
});
this.m_oScrollVer_.bind("mouseup.presentations", function (evt) {
oThis.verticalScrollMouseUp(this, evt);
});
this.m_oScrollVer_.bind("correctVerticalScroll", function (yPos) {
return oThis.CorrectSpeedVerticalScroll(yPos);
});
this.m_oScrollVer_.bind("correctVerticalScrollDelta", function (delta) {
return oThis.CorrectVerticalScrollByYDelta(delta);
});
this.m_oScrollVerApi = this.m_oScrollVer_;
}
this.m_oApi.sendEvent("asc_onUpdateScrolls", this.m_dDocumentWidth, this.m_dDocumentHeight);
this.m_dScrollX_max = this.m_bIsHorScrollVisible ? this.m_oScrollHorApi.getMaxScrolledX() : 0;
this.m_dScrollY_max = this.m_oScrollVerApi.getMaxScrolledY();
if (this.m_dScrollX >= this.m_dScrollX_max)
this.m_dScrollX = this.m_dScrollX_max;
if (this.m_dScrollY >= this.m_dScrollY_max)
this.m_dScrollY = this.m_dScrollY_max;
};
CEditorPage.prototype.checkNeedHorScrollValue = function (_width) {
var w = this.m_oEditor.HtmlElement.width;
w /= AscCommon.AscBrowser.retinaPixelRatio;
return (_width <= w) ? false : true;
};
CEditorPage.prototype.checkNeedHorScroll = function () {
if (!this.m_oLogicDocument)
return false;
if (this.m_oApi.isReporterMode) {
this.m_oEditor.HtmlElement.style.display = 'none';
this.m_oOverlay.HtmlElement.style.display = 'none';
this.m_oScrollHor.HtmlElement.style.display = 'none';
return false;
}
this.m_bIsHorScrollVisible = this.checkNeedHorScrollValue(this.m_dDocumentWidth);
if (this.m_bIsHorScrollVisible) {
if (this.m_oApi.isMobileVersion) {
this.m_oPanelRight.Bounds.B = 0;
this.m_oMainView.Bounds.B = 0;
this.m_oScrollHor.HtmlElement.style.display = 'none';
}
else {
this.m_oScrollHor.HtmlElement.style.display = 'block';
}
}
else {
this.m_oScrollHor.HtmlElement.style.display = 'none';
}
return false;
};
// Search
CEditorPage.prototype.ToSearchResult = function () {
var naviG = this.m_oDrawingDocument.CurrentSearchNavi;
if (naviG.Page == -1)
return;
var navi = naviG.Place[0];
var x = navi.X;
var y = navi.Y;
var rectSize = (navi.H * this.m_nZoomValue * g_dKoef_mm_to_pix / 100);
var pos = this.m_oDrawingDocument.ConvertCoordsToCursor2(x, y, navi.PageNum);
if (true === pos.Error)
return;
var boxX = 0;
var boxY = 0;
var w = this.m_oEditor.HtmlElement.width;
w /= AscCommon.AscBrowser.retinaPixelRatio;
var h = this.m_oEditor.HtmlElement.height;
h /= AscCommon.AscBrowser.retinaPixelRatio;
var boxR = w - 2;
var boxB = h - rectSize;
var nValueScrollHor = 0;
if (pos.X < boxX)
nValueScrollHor = this.GetHorizontalScrollTo(x, navi.PageNum);
if (pos.X > boxR) {
var _mem = x - g_dKoef_pix_to_mm * w * 100 / this.m_nZoomValue;
nValueScrollHor = this.GetHorizontalScrollTo(_mem, navi.PageNum);
}
var nValueScrollVer = 0;
if (pos.Y < boxY)
nValueScrollVer = this.GetVerticalScrollTo(y, navi.PageNum);
if (pos.Y > boxB) {
var _mem = y + navi.H + 10 - g_dKoef_pix_to_mm * h * 100 / this.m_nZoomValue;
nValueScrollVer = this.GetVerticalScrollTo(_mem, navi.PageNum);
}
var isNeedScroll = false;
if (0 != nValueScrollHor) {
isNeedScroll = true;
this.m_bIsUpdateTargetNoAttack = true;
var temp = nValueScrollHor * this.m_dScrollX_max / (this.m_dDocumentWidth - w);
this.m_oScrollHorApi.scrollToX(parseInt(temp), false);
}
if (0 != nValueScrollVer) {
isNeedScroll = true;
this.m_bIsUpdateTargetNoAttack = true;
var temp = nValueScrollVer * this.m_dScrollY_max / (this.m_dDocumentHeight - h);
this.m_oScrollVerApi.scrollToY(parseInt(temp), false);
}
if (true === isNeedScroll) {
this.OnScroll();
return;
}
this.OnUpdateOverlay();
};
// Reporter
CEditorPage.prototype.getStylesReporter = function () {
let styleContent = "";
let xOffset1 = "0";
let xOffset2 = "-20";
if (AscCommon.GlobalSkin.Type === "dark") {
xOffset1 = "-20";
xOffset2 = "0";
}
styleContent += (".btn-play { background-position: " + xOffset1 + "px -40px; }");
styleContent += (".btn-prev { background-position: " + xOffset1 + "px 0px; }");
styleContent += (".btn-next { background-position: " + xOffset1 + "px -20px; }");
styleContent += (".btn-pause { background-position: " + xOffset1 + "px -80px; }");
styleContent += (".btn-pointer { background-position: " + xOffset1 + "px -100px; }");
styleContent += (".btn-pointer-active { background-position: " + xOffset2 + "px -100px; }");
styleContent += (".btn-erase-all { background-position: " + xOffset1 + "px -120px; }");
styleContent += (".btn-eraser { background-position: " + xOffset1 + "px -140px; }");
styleContent += (".btn-eraser-active { background-position: " + xOffset2 + "px -140px; }");
styleContent += (".btn-highlighter { background-position: " + xOffset1 + "px -160px; }");
styleContent += (".btn-highlighter-active { background-position: " + xOffset2 + "px -160px; }");
styleContent += (".btn-pen { background-position: " + xOffset1 + "px -180px; }");
styleContent += (".btn-pen-active { background-position: " + xOffset2 + "px -180px; }");
styleContent += (".btn-text-default { position: absolute; background: " + AscCommon.GlobalSkin.DemButtonBackgroundColor + "; border: 1px solid " + AscCommon.GlobalSkin.DemButtonBorderColor + "; border-radius: 2px; color: " + AscCommon.GlobalSkin.DemButtonTextColor + "; font-size: 11px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; height: 22px; cursor: pointer; }");
styleContent += ".btn-text-default-img { background-repeat: no-repeat; position: absolute; background: transparent; border: none; height: 22px; cursor: pointer; }";
styleContent += (".btn-text-default-img:focus { outline: 0; outline-offset: 0; } .btn-text-default-img:hover { background-color: " + AscCommon.GlobalSkin.DemButtonBackgroundColorHover + "; }");
styleContent += (".btn-text-default-img:active, .btn-text-default.active { background-color: " + AscCommon.GlobalSkin.DemButtonBackgroundColorActive + " !important; -webkit-box-shadow: none; box-shadow: none; }");
styleContent += (".btn-text-default:focus { outline: 0; outline-offset: 0; } .btn-text-default:hover { background-color: " + AscCommon.GlobalSkin.DemButtonBackgroundColorHover + "; }");
styleContent += (".btn-text-default:active, .btn-text-default.active { background-color: " + AscCommon.GlobalSkin.DemButtonBackgroundColorActive + " !important; color: " + AscCommon.GlobalSkin.DemButtonTextColorActive + "; -webkit-box-shadow: none; box-shadow: none; }");
styleContent += (".separator { margin: 0px 10px; height: 19px; display: inline-block; position: absolute; border-left: 1px solid " + AscCommon.GlobalSkin.DemSplitterColor + "; vertical-align: top; padding: 0; width: 0; box-sizing: border-box; }");
styleContent += (".btn-text-default-img2 { background-repeat: no-repeat; position: absolute; background-color: " + AscCommon.GlobalSkin.DemButtonBackgroundColorActive + "; border: none; color: #7d858c; font-size: 11px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; height: 22px; cursor: pointer; }");
styleContent += ".btn-text-default-img2:focus { outline: 0; outline-offset: 0; }";
styleContent += ".btn-text-default::-moz-focus-inner { border: 0; padding: 0; }";
styleContent += ".btn-text-default-img::-moz-focus-inner { border: 0; padding: 0; }";
styleContent += ".btn-text-default-img2::-moz-focus-inner { border: 0; padding: 0; }";
styleContent += (".dem-text-color { color:" + AscCommon.GlobalSkin.DemTextColor + "; }");
styleContent += ".tooltip { position: absolute; background-color: " + GlobalSkin.DemBackgroundColor + "; color: " + GlobalSkin.DemButtonTextColor + "; padding: 6px 8px; border-radius: 4px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 11px; white-space: nowrap; z-index: 10; pointer-events: none; opacity: 0; border: 1px solid " + GlobalSkin.DemSplitterColor + "; box-shadow: 0 2px 5px rgba(0,0,0,0.2); }";
styleContent += ".tooltip.show { opacity: 1; }";
styleContent += ".tooltip::before { content: ''; position: absolute; top: 100%; left: 50%; margin-left: -5px; border: 5px solid transparent; border-top-color: " + GlobalSkin.DemSplitterColor + "; }";
styleContent += ".tooltip::after { content: ''; position: absolute; top: 100%; left: 50%; margin-left: -4px; border: 4px solid transparent; border-top-color: " + GlobalSkin.DemBackgroundColor + "; margin-top: -1px; }";
return styleContent;
};
CEditorPage.prototype.reporterTimerFunc = function (isReturn) {
var _curTime = new Date().getTime();
_curTime -= oThis.reporterTimerLastStart;
_curTime += oThis.reporterTimerAdd;
if (isReturn)
return _curTime;
_curTime = (_curTime / 1000) >> 0;
var _sec = _curTime % 60;
_curTime = (_curTime / 60) >> 0;
var _min = _curTime % 60;
var _hrs = (_curTime / 60) >> 0;
if (100 >= _hrs)
_hrs = 0;
var _value = (_hrs > 9) ? ("" + _hrs) : ("0" + _hrs);
_value += ":";
_value += ((_min > 9) ? ("" + _min) : ("0" + _min));
_value += ":";
_value += ((_sec > 9) ? ("" + _sec) : ("0" + _sec));
var _elem = document.getElementById("dem_id_time");
if (_elem)
_elem.innerHTML = _value;
};
CEditorPage.prototype.OnResizeReporter = function () {
if (this.m_oApi.isReporterMode) {
var _label1 = document.getElementById("dem_id_time");
if (!_label1)
return;
var _buttonPlay = document.getElementById("dem_id_play");
var _buttonReset = document.getElementById("dem_id_reset");
var _buttonPrev = document.getElementById("dem_id_prev");
var _buttonNext = document.getElementById("dem_id_next");
var _buttonSeparator = document.getElementById("dem_id_sep");
var _labelMain = document.getElementById("dem_id_slides");
var _buttonSeparator2 = document.getElementById("dem_id_sep2");
var _buttonPointer = document.getElementById("dem_id_pointer");
var _buttonDrawMenuTrigger = document.getElementById("dem_id_draw_menu_trigger");
var _drawMenu = document.getElementById("dem_id_draw_menu");
var _buttonEnd = document.getElementById("dem_id_end");
function redrawMenu() {
if (_drawMenu.style.display === "block") {
var offset = AscCommon.UI.getBoundingClientRect(_buttonDrawMenuTrigger);
_drawMenu.style.left = offset.left + (_buttonDrawMenuTrigger.offsetWidth - _drawMenu.offsetWidth) / 2 + "px";
_drawMenu.style.top = offset.top - _buttonDrawMenuTrigger.offsetHeight - _drawMenu.offsetHeight + "px";
}
}
_label1.style.display = "block";
_buttonPlay.style.display = "block";
_buttonReset.style.display = "block";
_buttonEnd.style.display = "block";
var _label1_width = _label1.offsetWidth;
var _main_width = _labelMain.offsetWidth;
var _buttonReset_width = _buttonReset.offsetWidth;
var _buttonEnd_width = _buttonEnd.offsetWidth;
if (0 == _label1_width)
_label1_width = 45;
if (0 == _main_width)
_main_width = 55;
if (0 == _buttonReset_width)
_buttonReset_width = 45;
if (0 == _buttonEnd_width)
_buttonEnd_width = 60;
var _width = parseInt(this.m_oMainView.HtmlElement.style.width);
// test first mode
// [10][time][6][play/pause(20)][6][reset]----[10]----[prev(20)][next(20)][15][slide x of x][15][pointer(20)][drawmenu(20)]----[10]----[end][10]
var _widthCenter = (20 + 20 + 15 + _main_width + 15 + 20 + 20);
var _posCenter = (_width - _widthCenter) >> 1;
var _test_width1 = 10 + _label1_width + 6 + 20 + 6 + _buttonReset_width + 10 + 20 + 20 + 15 + _main_width + 15 + 20 + 20 + 10 + _buttonEnd_width + 10;
var _is1 = ((10 + _label1_width + 6 + 20 + 6 + _buttonReset_width + 10) <= _posCenter) ? true : false;
var _is2 = ((_posCenter + _widthCenter) <= (_width - 20 - _buttonEnd_width)) ? true : false;
if (_is2 && (_test_width1 <= _width)) {
_label1.style.display = "block";
_buttonPlay.style.display = "block";
_buttonReset.style.display = "block";
_buttonEnd.style.display = "block";
_label1.style.left = "10px";
_buttonPlay.style.left = (10 + _label1_width + 6) + "px";
_buttonReset.style.left = (10 + _label1_width + 6 + 20 + 6) + "px";
if (!_is1) {
_posCenter = 10 + _label1_width + 6 + 20 + 6 + _buttonReset_width + 10 + ((_width - _test_width1) >> 1);
}
_buttonPrev.style.left = _posCenter + "px";
_buttonNext.style.left = (_posCenter + 20) + "px";
_buttonSeparator.style.left = (_posCenter + 48 - 10) + "px";
_labelMain.style.left = (_posCenter + 55) + "px";
_buttonSeparator2.style.left = (_posCenter + 55 + _main_width + 7 - 10) + "px";
_buttonPointer.style.left = (_posCenter + 70 + _main_width) + "px";
_buttonDrawMenuTrigger.style.left = (_posCenter + 90 + _main_width) + "px";
redrawMenu();
return;
}
// test second mode
// [10][prev(20)][next(20)][15][slide x of x][15][pointer(20)][drawmenu(20)]----[10]----[end][10]
var _test_width2 = 10 + 20 + 20 + 15 + _main_width + 15 + 20 + 20 + + 10 + _buttonEnd_width + 10;
if (_test_width2 <= _width)
{
_label1.style.display = "none";
_buttonPlay.style.display = "none";
_buttonReset.style.display = "none";
_buttonEnd.style.display = "block";
_buttonPrev.style.left = "10px";
_buttonNext.style.left = "30px";
_buttonSeparator.style.left = (58 - 10) + "px";
_labelMain.style.left = "65px";
_buttonSeparator2.style.left = (65 + _main_width + 7 - 10) + "px";
_buttonPointer.style.left = (80 + _main_width) + "px";
_buttonDrawMenuTrigger.style.left = (100 + _main_width) + "px";
redrawMenu();
return;
}
// test third mode
// ---------[prev(20)][next(20)][15][slide x of x][15][pointer(20)][drawmenu(20)]---------
// var _test_width3 = 20 + 20 + 15 + _main_width + 15 + 20;
if (_posCenter < 0)
_posCenter = 0;
_label1.style.display = "none";
_buttonPlay.style.display = "none";
_buttonReset.style.display = "none";
_buttonEnd.style.display = "none";
_buttonPrev.style.left = _posCenter + "px";
_buttonNext.style.left = (_posCenter + 20) + "px";
_buttonSeparator.style.left = (_posCenter + 48 - 10) + "px";
_labelMain.style.left = (_posCenter + 55) + "px";
_buttonSeparator2.style.left = (_posCenter + 55 + _main_width + 7 - 10) + "px";
_buttonPointer.style.left = (_posCenter + 70 + _main_width) + "px";
_buttonDrawMenuTrigger.style.left = (_posCenter + 90 + _main_width) + "px";
redrawMenu();
}
};
// Events
CEditorPage.prototype.onMouseDownTarget = function (e) {
if (oThis.m_oDrawingDocument.TargetHtmlElementOnSlide)
return oThis.onMouseDown(e);
else
return oThis.m_oNotesApi.onMouseDown(e);
};
CEditorPage.prototype.onMouseMoveTarget = function (e) {
if (oThis.m_oDrawingDocument.TargetHtmlElementOnSlide)
return oThis.onMouseMove(e);
else
return oThis.m_oNotesApi.onMouseMove(e);
};
CEditorPage.prototype.onMouseUpTarget = function (e) {
if (oThis.m_oDrawingDocument.TargetHtmlElementOnSlide)
return oThis.onMouseUp(e);
else
return oThis.m_oNotesApi.onMouseUp(e);
};
CEditorPage.prototype.setMouseMode = function (mouseMode) {
switch (mouseMode) {
case "hand":
{
this.MouseHandObject = {
check: function (_this, _pos) {
return true;
}
};
break;
}
case "select":
default:
{
this.MouseHandObject = null;
}
}
};
CEditorPage.prototype.onMouseDown = function (e) {
if (oThis.MobileTouchManager && oThis.MobileTouchManager.checkTouchEvent(e)) {
oThis.MobileTouchManager.startTouchingInProcess();
let res = oThis.MobileTouchManager.mainOnTouchStart(e);
oThis.MobileTouchManager.stopTouchingInProcess();
return res;
}
if (oThis.MobileTouchManager)
oThis.MobileTouchManager.checkMouseFocus(e);
oThis.m_oApi.checkInterfaceElementBlur();
oThis.m_oApi.checkLastWork();
if (false === oThis.m_oApi.bInit_word_control)
return;
var oWordControl = oThis;
if (oWordControl.m_oDrawingDocument.TransitionSlide.IsPlaying())
oWordControl.m_oDrawingDocument.TransitionSlide.End(true);
// после fullscreen возможно изменение X, Y после вызова Resize.
oWordControl.checkBodyOffset();
if (!oThis.m_bIsIE) {
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
}
if (AscCommon.g_inputContext && AscCommon.g_inputContext.externalChangeFocus())
return;
oWordControl.Thumbnails.SetFocusElement(FOCUS_OBJECT_MAIN);
if (oWordControl.DemonstrationManager.Mode)
return false;
var _xOffset = oWordControl.X;
var _yOffset = oWordControl.Y;
if (true === oWordControl.m_bIsRuler) {
_xOffset += (5 * g_dKoef_mm_to_pix);
_yOffset += (7 * g_dKoef_mm_to_pix);
}
if (window['closeDialogs'] != undefined)
window['closeDialogs']();
AscCommon.check_MouseDownEvent(e, true);
global_mouseEvent.LockMouse();
if ((0 == global_mouseEvent.Button) || (undefined == global_mouseEvent.Button)) {
global_mouseEvent.Button = 0;
oWordControl.m_bIsMouseLock = true;
if (oWordControl.m_oDrawingDocument.IsEmptyPresentation && oWordControl.m_oLogicDocument.CanEdit()) {
oWordControl.m_oLogicDocument.addNextSlide();
return;
}
}
if ((0 == global_mouseEvent.Button) || (undefined == global_mouseEvent.Button) || (2 == global_mouseEvent.Button)) {
var pos = oWordControl.m_oDrawingDocument.ConvertCoordsFromCursor2(global_mouseEvent.X, global_mouseEvent.Y);
if (pos.Page == -1)
return;
if (oWordControl.MouseHandObject) {
if (oWordControl.MouseHandObject.check(oWordControl, pos)) {
oWordControl.MouseHandObject.X = global_mouseEvent.X;
oWordControl.MouseHandObject.Y = global_mouseEvent.Y;
oWordControl.MouseHandObject.Active = true;
oWordControl.MouseHandObject.ScrollX = oWordControl.m_dScrollX;
oWordControl.MouseHandObject.ScrollY = oWordControl.m_dScrollY;
oWordControl.m_oDrawingDocument.SetCursorType(AscCommon.Cursors.Grabbing);
AscCommon.stopEvent(e);
return;
}
}
var ret = oWordControl.m_oDrawingDocument.checkMouseDown_Drawing(pos);
if (ret === true) {
if (-1 == oWordControl.m_oTimerScrollSelect)
oWordControl.m_oTimerScrollSelect = setInterval(oWordControl.SelectWheel, 20);
AscCommon.stopEvent(e);
return;
}
oWordControl.StartUpdateOverlay();
oWordControl.m_oDrawingDocument.m_lCurrentPage = pos.Page;
if (!oThis.m_oApi.isEyedropperStarted()) {
oWordControl.m_oLogicDocument.OnMouseDown(global_mouseEvent, pos.X, pos.Y, pos.Page);
}
oWordControl.EndUpdateOverlay();
}
else {
var pos = oWordControl.m_oDrawingDocument.ConvertCoordsFromCursor2(global_mouseEvent.X, global_mouseEvent.Y);
if (pos.Page == -1)
return;
oWordControl.m_oDrawingDocument.m_lCurrentPage = pos.Page;
}
if (-1 == oWordControl.m_oTimerScrollSelect) {
oWordControl.m_oTimerScrollSelect = setInterval(oWordControl.SelectWheel, 20);
}
oWordControl.Thumbnails.SetFocusElement(FOCUS_OBJECT_MAIN);
};
CEditorPage.prototype.onMouseMove = function (e) {
if (oThis.MobileTouchManager && oThis.MobileTouchManager.checkTouchEvent(e)) {
oThis.MobileTouchManager.startTouchingInProcess();
let res = oThis.MobileTouchManager.mainOnTouchMove(e);
oThis.MobileTouchManager.stopTouchingInProcess();
return res;
}
oThis.m_oApi.checkLastWork();
if (false === oThis.m_oApi.bInit_word_control)
return;
var oWordControl = oThis;
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
if (oWordControl.DemonstrationManager.Mode)
return false;
if (oWordControl.m_oDrawingDocument.IsEmptyPresentation)
return;
AscCommon.check_MouseMoveEvent(e);
var pos = oWordControl.m_oDrawingDocument.ConvertCoordsFromCursor2(global_mouseEvent.X, global_mouseEvent.Y);
if (oWordControl.MouseHandObject) {
if (oWordControl.MouseHandObject.Active) {
oWordControl.m_oDrawingDocument.SetCursorType(AscCommon.Cursors.Grabbing);
var scrollX = global_mouseEvent.X - oWordControl.MouseHandObject.X;
var scrollY = global_mouseEvent.Y - oWordControl.MouseHandObject.Y;
if (oWordControl.m_bIsHorScrollVisible) {
let scrollPosX = oWordControl.MouseHandObject.ScrollX - scrollX;
if (scrollPosX < 0)
scrollPosX = 0;
if (scrollPosX > oWordControl.m_dScrollX_max)
scrollPosX = oWordControl.m_dScrollX_max;
oWordControl.m_oScrollHorApi.scrollToX(scrollPosX);
}
let scrollPosY = oWordControl.MouseHandObject.ScrollY - scrollY;
if (scrollPosY < oWordControl.SlideScrollMIN)
scrollPosY = oWordControl.SlideScrollMIN;
if (scrollPosY > oWordControl.SlideScrollMAX)
scrollPosY = oWordControl.SlideScrollMAX;
oWordControl.m_oScrollVerApi.scrollToY(scrollPosY);
return;
}
else if (!global_mouseEvent.IsLocked) {
if (oWordControl.MouseHandObject.check(oWordControl, pos)) {
oThis.m_oApi.sync_MouseMoveStartCallback();
oThis.m_oApi.sync_MouseMoveCallback(new AscCommon.CMouseMoveData());
oThis.m_oApi.sync_MouseMoveEndCallback();
oWordControl.m_oDrawingDocument.SetCursorType(AscCommon.Cursors.Grab);
oWordControl.StartUpdateOverlay();
oWordControl.OnUpdateOverlay();
oWordControl.EndUpdateOverlay();
return;
}
}
}
if (pos.Page == -1)
return;
if (oWordControl.m_oDrawingDocument.m_sLockedCursorType != "")
oWordControl.m_oDrawingDocument.SetCursorType("default");
if (oWordControl.m_oDrawingDocument.InlineTextTrackEnabled) {
if (oWordControl.m_oLogicDocument.IsFocusOnNotes()) {
var pos2 = oWordControl.m_oDrawingDocument.ConvertCoordsToCursorWR(pos.X, pos.Y, pos.Page, undefined, true);
if (pos2.Y > oWordControl.m_oNotesContainer.AbsolutePosition.T * g_dKoef_mm_to_pix)
return;
}
}
if (oThis.m_oApi.isEyedropperStarted()) {
let oMainPos = oWordControl.m_oMainParent.AbsolutePosition;
let oParentPos = oWordControl.m_oMainView.AbsolutePosition;
let nX = global_mouseEvent.X - oWordControl.X - (oMainPos.L + oParentPos.L) * AscCommon.g_dKoef_mm_to_pix;
let nY = global_mouseEvent.Y - oWordControl.Y - (oMainPos.T + oParentPos.T) * AscCommon.g_dKoef_mm_to_pix;
nX = AscCommon.AscBrowser.convertToRetinaValue(nX, true);
nY = AscCommon.AscBrowser.convertToRetinaValue(nY, true);
oThis.m_oApi.checkEyedropperColor(nX, nY);
oThis.m_oApi.sync_MouseMoveStartCallback();
let MMData = new AscCommon.CMouseMoveData();
let Coords = oWordControl.m_oDrawingDocument.ConvertCoordsToCursorWR(pos.X, pos.Y, pos.Page, null, true);
MMData.X_abs = Coords.X;
MMData.Y_abs = Coords.Y;
const oEyedropperColor = oThis.m_oApi.getEyedropperColor();
if (oEyedropperColor) {
MMData.EyedropperColor = oEyedropperColor;
MMData.Type = Asc.c_oAscMouseMoveDataTypes.Eyedropper;
oWordControl.m_oDrawingDocument.SetCursorType(AscCommon.Cursors.Eyedropper, MMData);
}
else {
oWordControl.m_oDrawingDocument.SetCursorType("default");
}
oThis.m_oApi.sync_MouseMoveEndCallback();
return;
}
oWordControl.StartUpdateOverlay();
var is_drawing = oWordControl.m_oDrawingDocument.checkMouseMove_Drawing(pos);
if (is_drawing === true)
return;
oWordControl.m_oLogicDocument.OnMouseMove(global_mouseEvent, pos.X, pos.Y, pos.Page);
oWordControl.EndUpdateOverlay();
};
CEditorPage.prototype.onMouseMove2 = function () {
if (false === oThis.m_oApi.bInit_word_control)
return;
var oWordControl = oThis;
var pos = oWordControl.m_oDrawingDocument.ConvertCoordsFromCursor2(global_mouseEvent.X, global_mouseEvent.Y);
if (pos.Page == -1)
return;
if (oWordControl.m_oDrawingDocument.IsEmptyPresentation)
return;
oWordControl.StartUpdateOverlay();
var is_drawing = oWordControl.m_oDrawingDocument.checkMouseMove_Drawing(pos);
if (is_drawing === true)
return;
oWordControl.m_oLogicDocument.OnMouseMove(global_mouseEvent, pos.X, pos.Y, pos.Page);
oWordControl.EndUpdateOverlay();
};
CEditorPage.prototype.onMouseUp = function (e, bIsWindow) {
if (oThis.MobileTouchManager && oThis.MobileTouchManager.checkTouchEvent(e)) {
oThis.MobileTouchManager.startTouchingInProcess();
let res = oThis.MobileTouchManager.mainOnTouchEnd(e);
oThis.MobileTouchManager.stopTouchingInProcess();
return res;
}
oThis.m_oApi.checkLastWork();
if (false === oThis.m_oApi.bInit_word_control)
return;
var oWordControl = oThis;
if (!global_mouseEvent.IsLocked)
return;
if (oWordControl.DemonstrationManager.Mode) {
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
return false;
}
AscCommon.check_MouseUpEvent(e);
if (oWordControl.MouseHandObject && oWordControl.MouseHandObject.Active) {
oWordControl.MouseHandObject.Active = false;
oWordControl.m_oDrawingDocument.SetCursorType(AscCommon.Cursors.Grab);
oWordControl.m_bIsMouseLock = false;
return;
}
if (oWordControl.m_oDrawingDocument.IsEmptyPresentation)
return;
var pos = oWordControl.m_oDrawingDocument.ConvertCoordsFromCursor2(global_mouseEvent.X, global_mouseEvent.Y);
if (pos.Page == -1)
return;
oWordControl.UnlockCursorTypeOnMouseUp();
oWordControl.m_bIsMouseLock = false;
if (oWordControl.m_oDrawingDocument.TableOutlineDr.bIsTracked) {
oWordControl.m_oDrawingDocument.TableOutlineDr.checkMouseUp(global_mouseEvent.X, global_mouseEvent.Y, oWordControl);
oWordControl.m_oLogicDocument.Document_UpdateInterfaceState();
oWordControl.m_oLogicDocument.Document_UpdateRulersState();
if (-1 != oWordControl.m_oTimerScrollSelect) {
clearInterval(oWordControl.m_oTimerScrollSelect);
oWordControl.m_oTimerScrollSelect = -1;
}
oWordControl.OnUpdateOverlay();
return;
}
if (-1 != oWordControl.m_oTimerScrollSelect) {
clearInterval(oWordControl.m_oTimerScrollSelect);
oWordControl.m_oTimerScrollSelect = -1;
}
oWordControl.m_bIsMouseUpSend = true;
if (oWordControl.m_oDrawingDocument.InlineTextTrackEnabled) {
if (oWordControl.m_oLogicDocument.IsFocusOnNotes()) {
var pos2 = oWordControl.m_oDrawingDocument.ConvertCoordsToCursorWR(pos.X, pos.Y, pos.Page, undefined, true);
if (pos2.Y > oWordControl.m_oNotesContainer.AbsolutePosition.T * g_dKoef_mm_to_pix)
return;
}
}
oWordControl.StartUpdateOverlay();
var is_drawing = oWordControl.m_oDrawingDocument.checkMouseUp_Drawing(pos);
if (is_drawing === true)
return;
if (!oThis.checkFinishEyedropper()) {
oWordControl.m_oLogicDocument.OnMouseUp(global_mouseEvent, pos.X, pos.Y, pos.Page);
}
oWordControl.m_bIsMouseUpSend = false;
// oWordControl.m_oLogicDocument.Document_UpdateInterfaceState();
oWordControl.m_oLogicDocument.Document_UpdateRulersState();
oWordControl.EndUpdateOverlay();
};
CEditorPage.prototype.onMouseUpMainSimple = function () {
if (false === oThis.m_oApi.bInit_word_control)
return;
var oWordControl = oThis;
global_mouseEvent.Type = AscCommon.g_mouse_event_type_up;
AscCommon.MouseUpLock.MouseUpLockedSend = true;
global_mouseEvent.Sender = null;
global_mouseEvent.UnLockMouse();
global_mouseEvent.IsPressed = false;
if (-1 != oWordControl.m_oTimerScrollSelect) {
clearInterval(oWordControl.m_oTimerScrollSelect);
oWordControl.m_oTimerScrollSelect = -1;
}
if (oWordControl.MouseHandObject && oWordControl.MouseHandObject.Active) {
oWordControl.MouseHandObject.Active = false;
oWordControl.m_oDrawingDocument.SetCursorType(AscCommon.Cursors.Grab);
}
};
CEditorPage.prototype.onMouseUpExternal = function (x, y) {
if (false === oThis.m_oApi.bInit_word_control)
return;
var oWordControl = oThis;
if (oWordControl.DemonstrationManager.Mode)
return oWordControl.DemonstrationManager.onMouseUp({ pageX: 0, pageY: 0 });
//---
global_mouseEvent.X = x;
global_mouseEvent.Y = y;
global_mouseEvent.Type = AscCommon.g_mouse_event_type_up;
AscCommon.MouseUpLock.MouseUpLockedSend = true;
global_mouseEvent.Sender = null;
global_mouseEvent.UnLockMouse();
global_mouseEvent.IsPressed = false;
if (oWordControl.MouseHandObject && oWordControl.MouseHandObject.Active) {
oWordControl.MouseHandObject.Active = false;
oWordControl.m_oDrawingDocument.SetCursorType(AscCommon.Cursors.Grab);
oWordControl.m_bIsMouseLock = false;
return;
}
if (oWordControl.m_oDrawingDocument.IsEmptyPresentation)
return;
//---
var pos = oWordControl.m_oDrawingDocument.ConvertCoordsFromCursor2(global_mouseEvent.X, global_mouseEvent.Y);
if (pos.Page == -1)
return;
oWordControl.UnlockCursorTypeOnMouseUp();
oWordControl.m_bIsMouseLock = false;
if (-1 != oWordControl.m_oTimerScrollSelect) {
clearInterval(oWordControl.m_oTimerScrollSelect);
oWordControl.m_oTimerScrollSelect = -1;
}
oWordControl.StartUpdateOverlay();
oWordControl.m_bIsMouseUpSend = true;
if (!oThis.checkFinishEyedropper()) {
oWordControl.m_oLogicDocument.OnMouseUp(global_mouseEvent, pos.X, pos.Y, pos.Page);
}
oWordControl.m_bIsMouseUpSend = false;
oWordControl.m_oLogicDocument.Document_UpdateInterfaceState();
oWordControl.m_oLogicDocument.Document_UpdateRulersState();
oWordControl.EndUpdateOverlay();
};
CEditorPage.prototype.onMouseWhell = function(e) {
if (false === oThis.m_oApi.bInit_word_control)
return;
if (undefined !== window["AscDesktopEditor"])
{
if (false === window["AscDesktopEditor"]["CheckNeedWheel"]())
return;
}
if (global_mouseEvent.IsLocked)
return;
if (oThis.DemonstrationManager.Mode)
{
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
return false;
}
var _ctrl = false;
if (e.metaKey !== undefined)
_ctrl = e.ctrlKey || e.metaKey;
else
_ctrl = e.ctrlKey;
if (true === _ctrl)
{
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
return false;
}
let values = AscCommon.checkMouseWhell(e, {
isSupportBidirectional : false,
isAllowHorizontal : oThis.m_bIsHorScrollVisible,
isUseMaximumDelta : true
});
oThis.m_nVerticalSlideChangeOnScrollEnabled = true;
if (0 !== values.x)
oThis.m_oScrollHorApi.scrollBy(values.x, 0, false);
if (0 !== values.y)
oThis.m_oScrollVerApi.scrollBy(0, values.y, false);
oThis.m_nVerticalSlideChangeOnScrollEnabled = false;
if (e.preventDefault)
e.preventDefault();
else
e.returnValue = false;
return false;
};
CEditorPage.prototype.onKeyUp = function (e) {
global_keyboardEvent.AltKey = false;
global_keyboardEvent.CtrlKey = false;
global_keyboardEvent.ShiftKey = false;
global_keyboardEvent.AltGr = false;
if (oThis.m_oApi.isReporterMode) {
AscCommon.stopEvent(e);
return false;
}
};
CEditorPage.prototype.onKeyDown = function (e) {
oThis.m_oApi.checkLastWork();
if (oThis.m_oApi.isLongAction()) {
e.preventDefault();
return;
}
var oWordControl = oThis;
if (false === oWordControl.m_oApi.bInit_word_control) {
AscCommon.check_KeyboardEvent2(e);
e.preventDefault();
return;
}
if (oWordControl.IsFocus === false && e.emulated !== true)
return;
if (oWordControl.m_oApi.isLongAction() || oWordControl.m_bIsMouseLock === true) {
AscCommon.check_KeyboardEvent2(e);
e.preventDefault();
return;
}
if (oThis.DemonstrationManager.Mode) {
oWordControl.DemonstrationManager.onKeyDown(e);
return;
}
if (oWordControl.Thumbnails.FocusObjType == FOCUS_OBJECT_THUMBNAILS) {
if (0 == oWordControl.splitters[0].position) {
// табнейлы не видны. Чего же тогда обрабатывать им клавиатуру
e.preventDefault();
return false;
}
var ret = oWordControl.Thumbnails.onKeyDown(e);
if (false === ret)
return false;
if (undefined === ret)
return;
}
if (oWordControl.m_oDrawingDocument.TransitionSlide.IsPlaying())
oWordControl.m_oDrawingDocument.TransitionSlide.End(true);
var oWordControl = oThis;
if (false === oWordControl.m_oApi.bInit_word_control || oWordControl.IsFocus === false && e.emulated !== true || oWordControl.m_oApi.isLongAction() || oWordControl.m_bIsMouseLock === true)
return;
AscCommon.check_KeyboardEvent(e);
oWordControl.StartUpdateOverlay();
oWordControl.IsKeyDownButNoPress = true;
var _ret_mouseDown = oWordControl.m_oLogicDocument.OnKeyDown(global_keyboardEvent);
oWordControl.bIsUseKeyPress = ((_ret_mouseDown & keydownresult_PreventKeyPress) != 0) ? false : true;
if ((_ret_mouseDown & keydownresult_PreventDefault) != 0) {
// убираем превент с альтом. Уж больно итальянцы недовольны.
e.preventDefault();
}
oWordControl.EndUpdateOverlay();
};
CEditorPage.prototype.onKeyDownNoActiveControl = function (e) {
var bSendToEditor = false;
if (e.CtrlKey && !e.ShiftKey) {
switch (e.KeyCode) {
case 80: // P
case 83: // S
bSendToEditor = true;
break;
default:
break;
}
}
return bSendToEditor;
};
CEditorPage.prototype.onKeyDownTBIM = function (e) {
var oWordControl = oThis;
if (false === oWordControl.m_oApi.bInit_word_control || oWordControl.IsFocus === false || oWordControl.m_oApi.isLongAction() || oWordControl.m_bIsMouseLock === true)
return;
AscCommon.check_KeyboardEvent(e);
oWordControl.IsKeyDownButNoPress = true;
oWordControl.StartUpdateOverlay();
var _ret_mouseDown = oWordControl.m_oLogicDocument.OnKeyDown(global_keyboardEvent);
oWordControl.bIsUseKeyPress = ((_ret_mouseDown & keydownresult_PreventKeyPress) != 0) ? false : true;
oWordControl.EndUpdateOverlay();
if ((_ret_mouseDown & keydownresult_PreventDefault) != 0) {
// убираем превент с альтом. Уж больно итальянцы недовольны.
e.preventDefault();
return false;
}
};
CEditorPage.prototype.onKeyPress = function (e) {
if (window.GlobalPasteFlag || window.GlobalCopyFlag)
return;
if (oThis.Thumbnails.FocusObjType == FOCUS_OBJECT_THUMBNAILS) {
return;
}
var oWordControl = oThis;
if (false === oWordControl.m_oApi.bInit_word_control || oWordControl.IsFocus === false || oWordControl.m_oApi.isLongAction() || oWordControl.m_bIsMouseLock === true)
return;
if (window.opera && !oWordControl.IsKeyDownButNoPress) {
oWordControl.onKeyDown(e);
}
oWordControl.IsKeyDownButNoPress = false;
if (oThis.DemonstrationManager.Mode)
return;
if (false === oWordControl.bIsUseKeyPress)
return;
if (null == oWordControl.m_oLogicDocument)
return;
AscCommon.check_KeyboardEvent(e);
oWordControl.StartUpdateOverlay();
var retValue = oWordControl.m_oLogicDocument.OnKeyPress(global_keyboardEvent);
if (true === retValue)
e.preventDefault();
oWordControl.EndUpdateOverlay();
};
CEditorPage.prototype.SelectWheel = function () {
if (false === oThis.m_oApi.bInit_word_control)
return;
const oWordControl = oThis;
var positionMinY = oWordControl.m_oMainContent.AbsolutePosition.T * g_dKoef_mm_to_pix + oWordControl.Y;
if (oWordControl.m_bIsRuler)
positionMinY = (oWordControl.m_oMainContent.AbsolutePosition.T + oWordControl.m_oTopRuler_horRuler.AbsolutePosition.B) * g_dKoef_mm_to_pix +
oWordControl.Y;
var positionMaxY = oWordControl.m_oMainContent.AbsolutePosition.B * g_dKoef_mm_to_pix + oWordControl.Y;
var scrollYVal = 0;
if (global_mouseEvent.Y < positionMinY) {
var delta = 30;
if (20 > (positionMinY - global_mouseEvent.Y))
delta = 10;
scrollYVal = -delta;
}
else if (global_mouseEvent.Y > positionMaxY) {
var delta = 30;
if (20 > (global_mouseEvent.Y - positionMaxY))
delta = 10;
scrollYVal = delta;
}
var scrollXVal = 0;
if (oWordControl.m_bIsHorScrollVisible) {
var positionMinX = oWordControl.m_oMainParent.AbsolutePosition.L * g_dKoef_mm_to_pix + oWordControl.X;
if (oWordControl.m_bIsRuler)
positionMinX += oWordControl.m_oLeftRuler.AbsolutePosition.R * g_dKoef_mm_to_pix;
var positionMaxX = oWordControl.m_oMainParent.AbsolutePosition.R * g_dKoef_mm_to_pix + oWordControl.X - oWordControl.ScrollWidthPx;
if (global_mouseEvent.X < positionMinX) {
var delta = 30;
if (20 > (positionMinX - global_mouseEvent.X))
delta = 10;
scrollXVal = -delta;
}
else if (global_mouseEvent.X > positionMaxX) {
var delta = 30;
if (20 > (global_mouseEvent.X - positionMaxX))
delta = 10;
scrollXVal = delta;
}
}
if (0 != scrollYVal) {
if (((oWordControl.m_dScrollY + scrollYVal) >= oWordControl.SlideScrollMIN) && ((oWordControl.m_dScrollY + scrollYVal) <= oWordControl.SlideScrollMAX))
oWordControl.m_oScrollVerApi.scrollByY(scrollYVal, false);
}
if (0 != scrollXVal)
oWordControl.m_oScrollHorApi.scrollByX(scrollXVal, false);
if (scrollXVal != 0 || scrollYVal != 0)
oWordControl.onMouseMove2();
};
// overlay
CEditorPage.prototype.StartUpdateOverlay = function()
{
this.IsUpdateOverlayOnlyEnd = true;
};
CEditorPage.prototype.EndUpdateOverlay = function()
{
this.IsUpdateOverlayOnlyEnd = false;
if (this.IsUpdateOverlayOnEndCheck)
this.OnUpdateOverlay();
this.IsUpdateOverlayOnEndCheck = false;
};
CEditorPage.prototype.OnUpdateOverlay = function()
{
if (this.IsUpdateOverlayOnlyEnd)
{
this.IsUpdateOverlayOnEndCheck = true;
return false;
}
this.m_oApi.checkLastWork();
var overlay = this.m_oOverlayApi;
var overlayNotes = null;
var isDrawNotes = false;
if (this.IsNotesSupported() && this.m_oNotesApi)
{
overlayNotes = this.m_oNotesApi.m_oOverlayApi;
overlayNotes.SetBaseTransform();
overlayNotes.Clear();
if (this.m_oLogicDocument.IsFocusOnNotes())
isDrawNotes = true;
}
overlay.SetBaseTransform();
overlay.Clear();
var ctx = overlay.m_oContext;
var drDoc = this.m_oDrawingDocument;
drDoc.SelectionMatrix = null;
if (drDoc.SlideCurrent >= drDoc.m_oLogicDocument.GetSlidesCount())
drDoc.SlideCurrent = drDoc.m_oLogicDocument.GetSlidesCount() - 1;
if (drDoc.m_bIsSearching)
{
ctx.fillStyle = "rgba(255,200,0,1)";
ctx.beginPath();
var drDoc = this.m_oDrawingDocument;
drDoc.DrawSearch(overlay);
ctx.globalAlpha = 0.5;
ctx.fill();
ctx.beginPath();
ctx.globalAlpha = 1.0;
if (null != drDoc.CurrentSearchNavi)
{
ctx.globalAlpha = 0.2;
ctx.fillStyle = "rgba(51,102,204,255)";
var places = drDoc.CurrentSearchNavi.Place;
for (var i = 0; i < places.length; i++)
{
var place = places[i];
if (drDoc.SlideCurrent == place.PageNum)
{
drDoc.DrawSearchCur(overlay, place);
}
}
ctx.fill();
ctx.globalAlpha = 1.0;
}
}
if (drDoc.m_bIsSelection)
{
ctx.fillStyle = "rgba(51,102,204,255)";
ctx.strokeStyle = "#9ADBFE";
ctx.lineWidth = Math.round(AscCommon.AscBrowser.retinaPixelRatio);
ctx.beginPath();
if (drDoc.SlideCurrent != -1)
this.m_oLogicDocument.GetCurrentSlide().drawSelect(1);
ctx.globalAlpha = 0.2;
ctx.fill();
ctx.globalAlpha = 1.0;
ctx.stroke();
ctx.beginPath();
ctx.globalAlpha = 1.0;
if (this.MobileTouchManager)
this.MobileTouchManager.CheckSelect(overlay);
}
if (drDoc.MathTrack.IsActive())
{
var dGlobalAplpha = ctx.globalAlpha;
ctx.globalAlpha = 1.0;
drDoc.DrawMathTrack(isDrawNotes ? overlayNotes : overlay);
ctx.globalAlpha = dGlobalAplpha;
}
if (isDrawNotes && drDoc.m_bIsSelection)
{
var ctxOverlay = overlayNotes.m_oContext;
ctxOverlay.fillStyle = "rgba(51,102,204,255)";
ctxOverlay.strokeStyle = "#9ADBFE";
ctxOverlay.lineWidth = Math.round(AscCommon.AscBrowser.retinaPixelRatio);
ctxOverlay.beginPath();
if (drDoc.SlideCurrent != -1)
this.m_oLogicDocument.Slides[drDoc.SlideCurrent].drawNotesSelect();
ctxOverlay.globalAlpha = 0.2;
ctxOverlay.fill();
ctxOverlay.globalAlpha = 1.0;
ctxOverlay.stroke();
ctxOverlay.beginPath();
}
if (this.MobileTouchManager)
this.MobileTouchManager.CheckTableRules(overlay);
ctx.globalAlpha = 1.0;
ctx = null;
if (this.m_oLogicDocument != null && drDoc.SlideCurrent >= 0)
{
let oSlide = this.m_oLogicDocument.GetCurrentSlide();
oSlide.drawSelect(2);
var elements = oSlide.graphicObjects;
if (!elements.canReceiveKeyPress() && -1 != drDoc.SlideCurrent)
{
var drawPage = drDoc.SlideCurrectRect;
drDoc.AutoShapesTrack.init(overlay, drawPage.left, drawPage.top, drawPage.right, drawPage.bottom, this.m_oLogicDocument.GetWidthMM(), this.m_oLogicDocument.GetHeightMM());
elements.DrawOnOverlay(drDoc.AutoShapesTrack);
drDoc.AutoShapesTrack.CorrectOverlayBounds();
overlay.SetBaseTransform();
}
}
if (drDoc.InlineTextTrackEnabled && null != drDoc.InlineTextTrack)
{
var _oldPage = drDoc.AutoShapesTrack.PageIndex;
var _oldCurPageInfo = drDoc.AutoShapesTrack.CurrentPageInfo;
drDoc.AutoShapesTrack.PageIndex = drDoc.InlineTextTrackPage;
drDoc.AutoShapesTrack.DrawInlineMoveCursor(drDoc.InlineTextTrack.X, drDoc.InlineTextTrack.Y, drDoc.InlineTextTrack.Height, drDoc.InlineTextTrack.transform, drDoc.InlineTextInNotes ? overlayNotes : null);
drDoc.AutoShapesTrack.PageIndex = _oldPage;
drDoc.AutoShapesTrack.CurrentPageInfo = _oldCurPageInfo;
}
if (drDoc.placeholders.objects.length > 0 && drDoc.SlideCurrent >= 0)
{
var rectSlide = {};
rectSlide.left = AscCommon.AscBrowser.convertToRetinaValue(drDoc.SlideCurrectRect.left, true);
rectSlide.top = AscCommon.AscBrowser.convertToRetinaValue(drDoc.SlideCurrectRect.top, true);
rectSlide.right = AscCommon.AscBrowser.convertToRetinaValue(drDoc.SlideCurrectRect.right, true);
rectSlide.bottom = AscCommon.AscBrowser.convertToRetinaValue(drDoc.SlideCurrectRect.bottom, true);
drDoc.placeholders.draw(overlay, drDoc.SlideCurrent, rectSlide, this.m_oLogicDocument.GetWidthMM(), this.m_oLogicDocument.GetHeightMM());
}
drDoc.DrawHorVerAnchor();
if (this.MobileTouchManager)
{
let targetElement = (this.m_oDrawingDocument && this.m_oDrawingDocument.isDrawTargetGlass()) ? this.m_oDrawingDocument.TargetHtmlElement : null;
this.MobileTouchManager.CheckGlass(overlay, this.m_oEditor.HtmlElement, targetElement);
}
return true;
};
// Eyedropper
CEditorPage.prototype.checkFinishEyedropper = function () {
if (oThis.m_oApi.isEyedropperStarted()) {
oThis.m_oApi.finishEyedropper();
const oPos = oThis.m_oDrawingDocument.ConvertCoordsFromCursor2(global_mouseEvent.X, global_mouseEvent.Y);
if (oPos.Page !== -1) {
oThis.m_oLogicDocument.OnMouseMove(global_mouseEvent, oPos.X, oPos.Y, oPos.Page);
}
return true;
}
return false;
};
CEditorPage.prototype.UnlockCursorTypeOnMouseUp = function () {
if (this.m_oApi.isInkDrawerOn())
return;
this.m_oDrawingDocument.UnlockCursorType();
};
// Resize
CEditorPage.prototype.OnResize = function (isAttack) {
AscCommon.AscBrowser.checkZoom();
var isNewSize = this.checkBodySize();
if (!isNewSize && this.retinaScaling === AscCommon.AscBrowser.retinaPixelRatio && false === isAttack) {
this.DemonstrationManager.Resize();
return;
}
if (this.MobileTouchManager)
this.MobileTouchManager.Resize_Before();
if (this.m_oApi.printPreview)
this.m_oApi.printPreview.resize();
var isDesktopVersion = window["AscDesktopEditor"] !== undefined;
if (this.splitters[0].position > 0.1 && !isDesktopVersion) {
const maxSplitterThMax = Math.min(g_dKoef_pix_to_mm * this.Width / 3, 80);
this.splitters[0].setLimits(maxSplitterThMax >> 2, maxSplitterThMax >> 0);
const considerLimits = true;
this.splitters[0].setPosition(this.splitters[0].initialPosition, considerLimits);
this.onSplitterResize(true);
}
this.CheckRetinaDisplay();
if (GlobalSkin.SupportNotes) {
const _pos = this.Height - ((this.splitters[1].position * g_dKoef_mm_to_pix) >> 0);
const _min = 30 * g_dKoef_mm_to_pix;
if (_pos < _min && !isDesktopVersion) {
const dPos = (this.Height - _min) * g_dKoef_pix_to_mm;
const notesSplitterPosition = this.splitters[1].position >= this.splitters[1].minPosition
? Math.max(this.splitters[2].position + HIDDEN_PANE_HEIGHT, dPos)
: 1;
this.splitters[1].setPosition(notesSplitterPosition, false, true);
this.UpdateBottomControlsParams();
this.m_oMainContent.Bounds.B = this.splitters[1].position + GlobalSkin.SplitterWidthMM;
this.m_oMainContent.Bounds.isAbsB = true;
}
}
this.m_oBody.Resize(this.Width * g_dKoef_pix_to_mm, this.Height * g_dKoef_pix_to_mm, this);
if (this.m_oApi.isReporterMode)
this.OnResizeReporter();
this.onButtonTabsDraw();
if (AscCommon.g_inputContext)
AscCommon.g_inputContext.onResize("id_main_parent");
this.DemonstrationManager.Resize();
if (this.checkNeedHorScroll()) {
return;
}
// теперь проверим необходимость перезуммирования
if (1 == this.m_nZoomType && 0 != this.m_dDocumentPageWidth && 0 != this.m_dDocumentPageHeight) {
if (true === this.zoom_FitToWidth()) {
this.m_oBoundsController.ClearNoAttack();
this.onTimerScroll_sync();
this.FullRulersUpdate();
return;
}
}
if (2 == this.m_nZoomType && 0 != this.m_dDocumentPageWidth && 0 != this.m_dDocumentPageHeight) {
if (true === this.zoom_FitToPage()) {
this.m_oBoundsController.ClearNoAttack();
this.onTimerScroll_sync();
this.FullRulersUpdate();
return;
}
}
this.Thumbnails.m_bIsUpdate = true;
this.CalculateDocumentSize();
this.m_bIsUpdateTargetNoAttack = true;
this.m_bIsRePaintOnScroll = true;
this.m_oBoundsController.ClearNoAttack();
this.UpdateScrolls();
this.OnScroll();
this.onTimerScroll_sync(true);
this.DemonstrationManager.Resize();
if (this.MobileTouchManager)
this.MobileTouchManager.Resize_After();
if (this.IsNotesSupported() && this.m_oNotesApi && this.m_oApi.isDocumentLoadComplete/* asc_setSkin => OnResize before fonts loaded => crash on Notes.OnResize() */)
this.m_oNotesApi.OnResize();
if (this.m_oAnimPaneApi)
this.m_oAnimPaneApi.OnResize();
this.FullRulersUpdate();
if (AscCommon.g_imageControlsStorage)
AscCommon.g_imageControlsStorage.resize();
};
CEditorPage.prototype.OnResize2 = function (isAttack) {
this.m_oBody.Resize(this.Width * g_dKoef_pix_to_mm, this.Height * g_dKoef_pix_to_mm, this);
if (this.m_oApi.isReporterMode)
this.OnResizeReporter();
this.onButtonTabsDraw();
this.DemonstrationManager.Resize();
if (this.checkNeedHorScroll()) {
return;
}
// теперь проверим необходимость перезуммирования
if (1 == this.m_nZoomType) {
if (true === this.zoom_FitToWidth()) {
this.m_oBoundsController.ClearNoAttack();
this.onTimerScroll_sync();
this.FullRulersUpdate();
return;
}
}
if (2 == this.m_nZoomType) {
if (true === this.zoom_FitToPage()) {
this.m_oBoundsController.ClearNoAttack();
this.onTimerScroll_sync();
this.FullRulersUpdate();
return;
}
}
this.m_bIsUpdateHorRuler = true;
this.m_bIsUpdateVerRuler = true;
this.m_oHorRuler.RepaintChecker.BlitAttack = true;
this.m_oVerRuler.RepaintChecker.BlitAttack = true;
this.Thumbnails.m_bIsUpdate = true;
this.CalculateDocumentSize();
this.m_bIsUpdateTargetNoAttack = true;
this.m_bIsRePaintOnScroll = true;
this.m_oBoundsController.ClearNoAttack();
this.OnScroll();
this.onTimerScroll_sync(true);
this.DemonstrationManager.Resize();
if (this.IsNotesSupported() && this.m_oNotesApi)
this.m_oNotesApi.OnResize();
if (this.m_oAnimPaneApi)
this.m_oAnimPaneApi.OnResize();
this.FullRulersUpdate();
};
// Interface
CEditorPage.prototype.ThemeGenerateThumbnails = function (_master) {
var _layouts = _master.sldLayoutLst;
var _len = _layouts.length;
for (var i = 0; i < _len; i++) {
_layouts[i].recalculate();
_layouts[i].ImageBase64 = this.m_oLayoutDrawer.GetThumbnail(_layouts[i]);
_layouts[i].Width64 = this.m_oLayoutDrawer.WidthPx;
_layouts[i].Height64 = this.m_oLayoutDrawer.HeightPx;
}
};
CEditorPage.prototype.CheckLayouts = function (bIsAttack) {
if (window["NATIVE_EDITOR_ENJINE"] === true) {
return;
}
if (this.m_oLogicDocument.IsEmpty())
return;
let aAllLayouts = this.m_oLogicDocument.GetAllLayouts();
let oLtDrawer = this.m_oLayoutDrawer;
let dWMM = this.m_oLogicDocument.GetWidthMM();
let dHMM = this.m_oLogicDocument.GetHeightMM();
let bUpdate = false;
if (bIsAttack) {
bUpdate = true;
}
else {
if (this.AllLayouts.length !== aAllLayouts.length) {
bUpdate = true;
}
else if (Math.abs(oLtDrawer.WidthMM - dWMM) > AscFormat.MOVE_DELTA || Math.abs(oLtDrawer.HeightMM - dHMM) > AscFormat.MOVE_DELTA) {
bUpdate = true;
}
else {
for (let nIdx = 0; nIdx < aAllLayouts.length; ++nIdx) {
if (this.AllLayouts[nIdx] !== aAllLayouts[nIdx]) {
bUpdate = true;
break;
}
}
}
}
if (bUpdate) {
this.AllLayouts = aAllLayouts;
let _len = this.AllLayouts.length;
let arr = new Array(_len);
for (let i = 0; i < _len; i++) {
arr[i] = new CLayoutThumbnail();
arr[i].Index = i;
let oLt = this.AllLayouts[i];
arr[i].Type = oLt.getType();
arr[i].Name = oLt.getName();
oLtDrawer.WidthMM = this.m_oLogicDocument.GetWidthMM();
oLtDrawer.HeightMM = this.m_oLogicDocument.GetHeightMM();
oLt.ImageBase64 = oLtDrawer.GetThumbnail(oLt);
oLt.Width64 = oLtDrawer.WidthPx;
oLt.Height64 = oLtDrawer.HeightPx;
arr[i].Image = oLt.ImageBase64;
arr[i].Width = AscCommon.AscBrowser.convertToRetinaValue(oLt.Width64);
arr[i].Height = AscCommon.AscBrowser.convertToRetinaValue(oLt.Height64);
}
this.m_oApi.sendEvent("asc_onUpdateLayout", arr);
}
let oMaster = this.m_oLogicDocument.GetCurrentMaster();
if (this.LastMaster !== oMaster) {
if (oMaster) {
this.m_oApi.sendEvent("asc_onUpdateThemeIndex", oMaster.getThemeIndex());
this.m_oApi.sendColorThemes(oMaster.Theme);
}
this.LastMaster = oMaster;
}
this.m_oDrawingDocument.CheckGuiControlColors(bIsAttack);
};
// Current page
CEditorPage.prototype.SetCurrentPage = function () {
var drDoc = this.m_oDrawingDocument;
if (0 <= drDoc.SlideCurrent && drDoc.SlideCurrent < drDoc.GetSlidesCount()) {
this.CreateBackgroundHorRuler();
this.CreateBackgroundVerRuler();
}
this.m_bIsUpdateHorRuler = true;
this.m_bIsUpdateVerRuler = true;
this.OnScroll();
this.m_oApi.sync_currentPageCallback(drDoc.m_lCurrentPage);
};
CEditorPage.prototype.GetSlidesCount = function () {
return this.m_oDrawingDocument.GetSlidesCount();
};
CEditorPage.prototype.GoToPage = function (lPageNum, isFromZoom, isScroll, bIsAttack, isReporterUpdateSlide) {
if (this.m_oApi.isReporterMode) {
if (!this.DemonstrationManager.Mode) {
// first run
this.m_oApi.StartDemonstration("id_reporter_dem", 0);
this.m_oApi.sendEvent("asc_onDemonstrationFirstRun");
this.m_oApi.sendFromReporter("{ \"reporter_command\" : \"start_show\" }");
}
else if (true !== isReporterUpdateSlide) {
this.m_oApi.DemonstrationGoToSlide(lPageNum);
}
//return;
}
if (this.DemonstrationManager.Mode && (isFromZoom || isScroll)) {
return;
}
if (this.DemonstrationManager.Mode && !isReporterUpdateSlide) {
return this.m_oApi.DemonstrationGoToSlide(lPageNum);
}
var drDoc = this.m_oDrawingDocument;
if (!this.m_oScrollVerApi) {
// сборка файлов
return;
}
if (this.m_oApi.isEyedropperStarted() && drDoc.SlideCurrent !== lPageNum) {
this.m_oApi.cancelEyedropper();
}
var _old_empty = this.m_oDrawingDocument.IsEmptyPresentation;
this.m_oDrawingDocument.IsEmptyPresentation = false;
if (-1 == lPageNum) {
this.m_oDrawingDocument.IsEmptyPresentation = true;
if (this.IsNotesSupported() && this.m_oNotesApi)
this.m_oNotesApi.OnRecalculateNote(-1, 0, 0);
if (this.m_oAnimPaneApi)
this.m_oAnimPaneApi.OnAnimPaneChanged(null);
}
if (this.m_oDrawingDocument.TransitionSlide.IsPlaying())
this.m_oDrawingDocument.TransitionSlide.End(true);
if (this.m_oLogicDocument.IsStartedPreview())
this.m_oApi.asc_StopAnimationPreview();
if (lPageNum != -1 && (lPageNum < 0 || lPageNum >= drDoc.GetSlidesCount()))
return;
this.Thumbnails.LockMainObjType = true;
this.StartVerticalScroll = false;
this.m_oApi.sendEvent("asc_onEndPaintSlideNum");
var _bIsUpdate = (drDoc.SlideCurrent != lPageNum);
this.ZoomFreePageNum = lPageNum;
drDoc.SlideCurrent = lPageNum;
var isRecalculateNote = this.m_oLogicDocument.Set_CurPage(lPageNum);
if (bIsAttack && !isRecalculateNote) {
var _curPage = this.m_oLogicDocument.CurPage;
var oSlide = this.m_oLogicDocument.GetCurrentSlide();
if (_curPage >= 0 && oSlide) {
this.m_oNotesApi.OnRecalculateNote(_curPage, oSlide.NotesWidth, oSlide.getNotesHeight());
if (this.m_oAnimPaneApi) {
this.m_oAnimPaneApi.OnAnimPaneChanged(null);
}
}
}
// теперь пошлем все шаблоны первой темы
this.CheckLayouts();
this.SlideDrawer.CheckSlide(drDoc.SlideCurrent);
if (true !== isFromZoom) {
this.m_oLogicDocument.Document_UpdateInterfaceState();
}
this.CalculateDocumentSize(false);
this.Thumbnails.SelectPage(lPageNum);
this.CreateBackgroundHorRuler();
this.CreateBackgroundVerRuler();
this.m_bIsUpdateHorRuler = true;
this.m_bIsUpdateVerRuler = true;
this.OnCalculatePagesPlace();
//this.m_oScrollVerApi.scrollTo(0, drDoc.SlideCurrent * this.m_dDocumentPageHeight);
if (this.IsGoToPageMAXPosition) {
if (this.SlideScrollMAX > this.m_dScrollY_max)
this.SlideScrollMAX = this.m_dScrollY_max;
this.m_oScrollVerApi.scrollToY(this.SlideScrollMAX);
this.IsGoToPageMAXPosition = false;
}
else {
//this.m_oScrollVerApi.scrollToY(this.SlideScrollMIN);
if (this.m_dScrollY_Central > this.m_dScrollY_max)
this.m_dScrollY_Central = this.m_dScrollY_max;
this.m_oScrollVerApi.scrollToY(this.m_dScrollY_Central);
}
if (this.m_bIsHorScrollVisible) {
if (this.m_dScrollX_Central > this.m_dScrollX_max)
this.m_dScrollX_Central = this.m_dScrollX_max;
this.m_oScrollHorApi.scrollToX(this.m_dScrollX_Central);
}
this.ZoomFreePageNum = -1;
if (this.m_oApi.isViewMode === false && null != this.m_oLogicDocument) {
//this.m_oLogicDocument.Set_CurPage( drDoc.SlideCurrent );
//this.m_oLogicDocument.MoveCursorToXY(0, 0, false);
this.m_oLogicDocument.RecalculateCurPos();
this.m_oApi.sync_currentPageCallback(drDoc.SlideCurrent);
}
else {
this.m_oApi.sync_currentPageCallback(drDoc.SlideCurrent);
}
this.m_oLogicDocument.Document_UpdateSelectionState();
this.Thumbnails.LockMainObjType = false;
if (this.m_oDrawingDocument.IsEmptyPresentation != _old_empty || _bIsUpdate || bIsAttack === true)
this.OnScroll();
};
// Fonts cache checker
CEditorPage.prototype.CheckFontCache = function () {
var _c = oThis;
_c.m_nCurrentTimeClearCache++;
if (_c.m_nCurrentTimeClearCache > 750) // 30 секунд. корректировать при смене интервала главного таймера!!!
{
_c.m_nCurrentTimeClearCache = 0;
_c.m_oDrawingDocument.CheckFontCache();
}
oThis.m_oLogicDocument.ContinueSpellCheck();
};
// Open/Save
CEditorPage.prototype.InitDocument = function (bIsEmpty) {
this.m_oDrawingDocument.m_oWordControl = this;
this.m_oDrawingDocument.m_oLogicDocument = this.m_oLogicDocument;
if (false === bIsEmpty) {
this.m_oLogicDocument.LoadTestDocument();
}
this.CalculateDocumentSize();
this.StartMainTimer();
this.CreateBackgroundHorRuler();
this.CreateBackgroundVerRuler();
this.UpdateHorRuler();
this.UpdateVerRuler();
};
CEditorPage.prototype.InitControl = function () {
this.Thumbnails.Init();
this.CalculateDocumentSize();
this.StartMainTimer();
this.CreateBackgroundHorRuler();
this.CreateBackgroundVerRuler();
this.UpdateHorRuler();
this.UpdateVerRuler();
this.m_oApi.syncOnThumbnailsShow();
if (true) {
AscCommon.InitBrowserInputContext(this.m_oApi, "id_target_cursor", "id_main_parent");
if (AscCommon.g_inputContext)
AscCommon.g_inputContext.onResize("id_main_parent");
this.initEventsMobile();
if (this.m_oApi.isReporterMode)
AscCommon.g_inputContext.HtmlArea.style.display = "none";
}
};
CEditorPage.prototype.SaveDocument = function (noBase64) {
var writer = new AscCommon.CBinaryFileWriter();
this.m_oLogicDocument.CalculateComments();
if (noBase64) {
return writer.WriteDocument3(this.m_oLogicDocument);;
} else {
var str = writer.WriteDocument(this.m_oLogicDocument);
return str;
//console.log(str);
}
};
// Animation pane
CEditorPage.prototype.GetAnimPaneHeight = function () {
return this.splitters[2].position;
};
CEditorPage.prototype.IsBottomPaneShown = function () {
return this.splitters[1].position > HIDDEN_PANE_HEIGHT;
};
CEditorPage.prototype.IsAnimPaneShown = function () {
if (!this.IsBottomPaneShown()) {
return false;
}
return this.GetAnimPaneHeight() > 0;
};
CEditorPage.prototype.ShowAnimPane = function (bShow) {
if (this.IsAnimPaneShown() === bShow)
return;
if (bShow) {
const restoredAnimPaneSplitterPosition = this.splitters[2].savedPosition > HIDDEN_PANE_HEIGHT
? this.splitters[2].savedPosition
: this.splitters[2].minPosition;
this.splitters[2].setPosition(restoredAnimPaneSplitterPosition, true);
this.splitters[1].setPosition(this.splitters[1].position + this.splitters[2].position, true);
this.onSplitterResize();
} else {
this.splitters[1].setPosition(this.GetNotesHeight(), true);
this.splitters[2].setPosition(0, false, true);
this.onSplitterResize();
if (this.m_oLogicDocument) this.m_oLogicDocument.CheckAnimPaneShow();
}
};
CEditorPage.prototype.ChangeTimelineScale = function (bZoomOut) {
this.m_oAnimPaneApi.timeline.Control.timeline.changeTimelineScale(bZoomOut);
};
CEditorPage.prototype.IsAnimPaneSupported = function () {
return this.IsSupportAnimPane && !this.m_oApi.isMasterMode();
};
// Notes
CEditorPage.prototype.GetNotesHeight = function () {
return this.splitters[1].position - this.splitters[2].position;
};
CEditorPage.prototype.IsNotesShown = function () {
if (!this.IsBottomPaneShown()) {
return false;
}
return this.GetNotesHeight() > HIDDEN_PANE_HEIGHT;
};
CEditorPage.prototype.ShowNotes = function (bShow) {
if (this.IsNotesShown() === bShow)
return;
if (bShow) {
const notesSplitterPosition = this.splitters[1].savedPosition - this.splitters[2].position < this.splitters[1].minPosition
? this.splitters[2].position + this.splitters[1].minPosition
: this.splitters[1].savedPosition;
this.splitters[1].setPosition(notesSplitterPosition, true);
this.onSplitterResize();
} else {
this.splitters[1].setPosition(0, false, true);
this.onSplitterResize();
if (this.m_oLogicDocument) this.m_oLogicDocument.CheckNotesShow();
}
};
CEditorPage.prototype.setNotesEnable = function (bEnabled) {
if (bEnabled == this.IsSupportNotes)
return;
GlobalSkin.SupportNotes = bEnabled;
this.IsSupportNotes = bEnabled;
this.ShowNotes(bEnabled);
};
CEditorPage.prototype.setAnimPaneEnable = function (bEnabled) {
if (bEnabled == this.IsSupportAnimPane)
return;
this.IsSupportAnimPane = bEnabled;
this.splitters[2].setPosition(0);
Asc.editor.sendEvent('asc_onCloseAnimPane');
this.onSplitterResize();
};
CEditorPage.prototype.IsNotesSupported = function () {
return this.IsSupportNotes && !this.m_oApi.isMasterMode();
};
// Media player
CEditorPage.prototype.GetMediaPlayerData = function (mediaData) {
if (!mediaData || !mediaData.isValid()) return null;
let oMediaFrameRect = this.GetMediaFrameRect();
if (!oMediaFrameRect) return null;
let oMediaControlRect = this.GetMediaControlRect(oMediaFrameRect);
if (!oMediaControlRect) return null;
return mediaData.getPlayerData(oMediaFrameRect, oMediaControlRect);
};
CEditorPage.prototype.GetMediaFrameRect = function () {
let mediaData = this.m_oApi.getMediaData();
if (!mediaData) return null;
let oDrawing = mediaData.getDrawing();
if (!oDrawing) return null;
let oNotRotatedBounds = new AscFormat.CGraphicBounds(
oDrawing.x,
oDrawing.y,
oDrawing.x + oDrawing.extX,
oDrawing.y + oDrawing.extY
);
let oBounds = oNotRotatedBounds;
if (!this.DemonstrationManager.Mode) {
let nControlX = this.X;
let nControlY = this.Y;
let oDD = this.m_oDrawingDocument;
let nSlide = this.m_oLogicDocument.CurPage;
let getCoords = function (x, y) {
let oPos = oDD.ConvertCoordsToCursorWR(x, y, nSlide, null, true);
oPos.X += nControlX;
oPos.Y += nControlY;
oPos.X = oPos.X >> 0;
oPos.Y = oPos.Y >> 0;
return oPos;
};
let oLeftTop = getCoords(oBounds.x, oBounds.y);
let oRightBottom = getCoords(oBounds.x + oBounds.w, oBounds.y + oBounds.h);
return new AscFormat.CGraphicBounds(
oLeftTop.X,
oLeftTop.Y,
oRightBottom.X,
oRightBottom.Y
);
}
else {
let manager = this.DemonstrationManager;
let transition = manager.Transition;
if ((manager.SlideNum >= 0 && manager.SlideNum < manager.GetSlidesCount()) && (!transition || !transition.IsPlaying())) {
let _x = (transition.Rect.x / AscCommon.AscBrowser.retinaPixelRatio) >> 0;
let _y = (transition.Rect.y / AscCommon.AscBrowser.retinaPixelRatio) >> 0;
let _w = (transition.Rect.w / AscCommon.AscBrowser.retinaPixelRatio) >> 0;
let _w_mm = this.m_oLogicDocument.GetWidthMM();
if (this.m_oApi.isReporterMode) {
_x += ((this.m_oMainParent.AbsolutePosition.L * AscCommon.g_dKoef_mm_to_pix) >> 0);
}
let zoom = _w / _w_mm;
let getCoords = function (x, y) {
return {
X: _x + zoom * x + 0.5 >> 0,
Y: _y + zoom * y + 0.5 >> 0
}
};
let oLeftTop = getCoords(oBounds.x, oBounds.y);
let oRightBottom = getCoords(oBounds.x + oBounds.w, oBounds.y + oBounds.h);
return new AscFormat.CGraphicBounds(
oLeftTop.X,
oLeftTop.Y,
oRightBottom.X,
oRightBottom.Y
);
}
}
return null;
};
CEditorPage.prototype.GetMediaControlRect = function (oMediaFrameRect) {
if (!oMediaFrameRect) return null;
let mediaData = this.m_oApi.getMediaData();
if (!mediaData) return null;
let oDrawing = mediaData.getDrawing();
if (!oDrawing) return;
let nWidth, nHeight, nX, nY;
nWidth = oMediaFrameRect.w - 2 * MIN_MEDIA_CONTROL_CONTROL_INSET;
nWidth = Math.max(nWidth, MIN_MEDIA_CONTROL_WIDTH);
nHeight = MEDIA_CONTROL_HEIGHT;
if (!oThis.DemonstrationManager.Mode) {
let dKoef = AscCommon.g_dKoef_mm_to_pix;
nX = (oMediaFrameRect.l + oMediaFrameRect.r) / 2.0 - nWidth / 2 + 0.5 >> 0;
nY = oMediaFrameRect.b + MEDIA_CONTROL_TOP_MARGIN + 0.5 >> 0;
let nControlX = this.X;
let nControlY = this.Y;
//view rect relative to slide coords
let oMainViewRect = this.m_oMainView.AbsolutePosition;
let dViewL = 0, dViewT = 0, dViewR = 0, dViewB = 0;
let oCurControl = this.m_oMainView;
while (oCurControl) {
let oAbsPos = oCurControl.AbsolutePosition;
dViewL += oAbsPos.L;
dViewT += oAbsPos.T;
oCurControl = oCurControl.Parent;
}
let nViewRectL = nControlX + dViewL * dKoef + 0.5 >> 0;
let nViewRectT = nControlY + dViewT * dKoef + 0.5 >> 0;
let nViewRectR = nViewRectL + (oMainViewRect.R - oMainViewRect.L) * dKoef + 0.5 >> 0;
let nViewRectB = nViewRectT + (oMainViewRect.B - oMainViewRect.T) * dKoef + 0.5 >> 0;
if (nX < nViewRectL)
nX = nViewRectL;
if (nY < nViewRectT)
nY = nViewRectT;
if (nX + nWidth > nViewRectR)
nX = nViewRectR - nWidth;
if (nY + nHeight > nViewRectB)
nY = nViewRectB - nHeight;
return new AscFormat.CGraphicBounds(nX, nY, nX + nWidth, nY + nHeight);
}
else {
let manager = this.DemonstrationManager;
let transition = manager.Transition;
if ((manager.SlideNum >= 0 && manager.SlideNum < manager.GetSlidesCount()) && (!transition || !transition.IsPlaying())) {
let _x = (transition.Rect.x / AscCommon.AscBrowser.retinaPixelRatio) >> 0;
let _y = (transition.Rect.y / AscCommon.AscBrowser.retinaPixelRatio) >> 0;
let _w = (transition.Rect.w / AscCommon.AscBrowser.retinaPixelRatio) >> 0;
let _h = (transition.Rect.h / AscCommon.AscBrowser.retinaPixelRatio) >> 0;
if (this.m_oApi.isReporterMode) {
_x += ((this.m_oMainParent.AbsolutePosition.L * AscCommon.g_dKoef_mm_to_pix) >> 0);
}
let _r = _x + _w;
let _b = _y + _h;
nX = (oMediaFrameRect.l + oMediaFrameRect.r) / 2.0 - nWidth / 2 + 0.5 >> 0;
nY = oMediaFrameRect.b - MEDIA_CONTROL_TOP_MARGIN - MEDIA_CONTROL_HEIGHT + 0.5 >> 0;
if (nX < _x)
nX = _x;
if (nY < _y)
nY = _y;
if (nX + nWidth > _r)
nX = _r - nWidth;
if (nY + nHeight > _b)
nY = _b - nHeight;
return new AscFormat.CGraphicBounds(nX, nY, nX + nWidth, nY + nHeight);
}
}
return null;
};
CEditorPage.prototype.OnUpdateMediaPlayer = function () {
let oPlayerData = this.GetMediaPlayerData();
console.log(JSON.stringify(oPlayerData))
};
CEditorPage.prototype.UpdateViewMode = function () {
let nMode = Asc.editor.presentationViewMode;
switch (nMode) {
case Asc.c_oAscPresentationViewMode.normal:
{
this.GoToPage(0);
this.setNotesEnable(true);
this.setAnimPaneEnable(true);
this.m_oApi.hideMediaControl();
this.m_oApi.asc_hideComments();
this.m_oLogicDocument.Recalculate({ Drawings: { All: true, Map: {} } });
this.m_oLogicDocument.Document_UpdateInterfaceState();
break;
}
case Asc.c_oAscPresentationViewMode.masterSlide:
{
let oSlide = this.m_oLogicDocument.GetCurrentSlide();
let nIdx = 0;
if (oSlide) {
let nCurIdx = this.m_oLogicDocument.GetSlideIndex(oSlide.Layout);
if (nCurIdx !== -1) {
nIdx = nCurIdx;
}
}
this.GoToPage(nIdx);
this.m_oLogicDocument.Recalculate({ Drawings: { All: true, Map: {} } });
this.setNotesEnable(false);
this.setAnimPaneEnable(false);
this.m_oApi.hideMediaControl();
this.m_oApi.asc_hideComments();
this.m_oLogicDocument.Document_UpdateInterfaceState();
break;
}
case Asc.c_oAscPresentationViewMode.sorter:
{
break;
}
}
};
CEditorPage.prototype.getZoomValue = function() {
return this.m_nZoomValue / 100;
};
// EXPORTS
window['AscCommon'] = window['AscCommon'] || {};
window['AscCommon'].HIDDEN_PANE_HEIGHT = HIDDEN_PANE_HEIGHT;
window['AscCommon'].TIMELINE_HEIGHT = TIMELINE_HEIGHT;
window['AscCommon'].TIMELINE_LIST_RIGHT_MARGIN = TIMELINE_LIST_RIGHT_MARGIN;
window['AscCommon'].TIMELINE_HEADER_RIGHT_MARGIN = TIMELINE_HEADER_RIGHT_MARGIN;
window['AscCommon'].Page_Width = 297;
window['AscCommon'].Page_Height = 210;
// Margins in millimeters
window['AscCommon'].X_Left_Margin = 30;
window['AscCommon'].X_Right_Margin = 15;
window['AscCommon'].Y_Bottom_Margin = 20;
window['AscCommon'].Y_Top_Margin = 20;
window['AscCommonSlide'] = window['AscCommonSlide'] || {};
window['AscCommonSlide'].CEditorPage = CEditorPage;
})(window);